Timeline: Add missing include of unistd.h.
[nondaw.git] / nonlib / Mutex.H
blobba7d7fc84903c484b0d0613355472d98c433a0c2
2 /*******************************************************************************/
3 /* Copyright (C) 2008 Jonathan Moore Liles                                     */
4 /*                                                                             */
5 /* This program is free software; you can redistribute it and/or modify it     */
6 /* under the terms of the GNU General Public License as published by the       */
7 /* Free Software Foundation; either version 2 of the License, or (at your      */
8 /* option) any later version.                                                  */
9 /*                                                                             */
10 /* This program is distributed in the hope that it will be useful, but WITHOUT */
11 /* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or       */
12 /* FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for   */
13 /* more details.                                                               */
14 /*                                                                             */
15 /* You should have received a copy of the GNU General Public License along     */
16 /* with This program; see the file COPYING.  If not,write to the Free Software */
17 /* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
18 /*******************************************************************************/
20 #pragma once
22 #include <pthread.h>
24 const pthread_mutex_t _mutex_initializer = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
26 class Mutex
29     pthread_mutex_t _lock;
31 public:
33     Mutex ( )
34         {
35 //            pthread_mutex_init( &_lock, NULL );
36             _lock = _mutex_initializer;
37         }
39     virtual ~Mutex ( )
40         {
41             pthread_mutex_destroy( &_lock );
42         }
44     void
45     lock ( void )
46         {
47             pthread_mutex_lock( &_lock );
48         }
50     void
51     unlock ( void )
52         {
53             pthread_mutex_unlock( &_lock );
54         }
56     bool
57     trylock ( void )
58         {
59             return pthread_mutex_trylock( &_lock ) == 0;
60         }
65 class Locker
68     Mutex &_lock;
70 public:
72     Locker ( Mutex & lock ) : _lock( lock )
73         {
74             _lock.lock();
75         }
77     ~Locker ( )
78         {
79             _lock.unlock();
80         }