Update XCode project.
[jack2.git] / posix / JackPosixMutex.h
blob91d21132941e6f12023d157ff72cccbc62f0c815
1 /*
2 Copyright (C) 2006 Grame
4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Lesser General Public
6 License as published by the Free Software Foundation; either
7 version 2.1 of the License, or (at your option) any later version.
9 This library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Lesser General Public License for more details.
14 You should have received a copy of the GNU Lesser General Public
15 License along with this library; if not, write to the Free Software
16 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 Grame Research Laboratory, 9 rue du Garet, 69001 Lyon - France
19 grame@grame.fr
22 #ifndef __JackPosixMutex__
23 #define __JackPosixMutex__
25 #include <pthread.h>
26 #include <stdio.h>
27 #include <assert.h>
28 #include "JackError.h"
30 namespace Jack
32 /*!
33 \brief Mutex abstraction.
37 class JackBasePosixMutex
40 protected:
42 pthread_mutex_t fMutex;
44 public:
46 JackBasePosixMutex()
48 pthread_mutex_init(&fMutex, NULL);
51 virtual ~JackBasePosixMutex()
53 pthread_mutex_destroy(&fMutex);
56 void Lock()
58 int res = pthread_mutex_lock(&fMutex);
59 if (res != 0)
60 jack_error("JackBasePosixMutex::Lock res = %d", res);
63 bool Trylock()
65 return (pthread_mutex_trylock(&fMutex) == 0);
68 void Unlock()
70 int res = pthread_mutex_unlock(&fMutex);
71 if (res != 0)
72 jack_error("JackBasePosixMutex::Unlock res = %d", res);
77 class JackPosixMutex
80 protected:
82 pthread_mutex_t fMutex;
84 public:
86 JackPosixMutex()
88 // Use recursive mutex
89 pthread_mutexattr_t mutex_attr;
90 int res;
91 res = pthread_mutexattr_init(&mutex_attr);
92 assert(res == 0);
93 res = pthread_mutexattr_settype(&mutex_attr, PTHREAD_MUTEX_RECURSIVE);
94 assert(res == 0);
95 res = pthread_mutex_init(&fMutex, &mutex_attr);
96 assert(res == 0);
97 res = pthread_mutexattr_destroy(&mutex_attr);
98 assert(res == 0);
101 virtual ~JackPosixMutex()
103 pthread_mutex_destroy(&fMutex);
106 void Lock()
108 int res = pthread_mutex_lock(&fMutex);
109 if (res != 0)
110 jack_error("JackPosixMutex::Lock res = %d", res);
113 bool Trylock()
115 return (pthread_mutex_trylock(&fMutex) == 0);
118 void Unlock()
120 int res = pthread_mutex_unlock(&fMutex);
121 if (res != 0)
122 jack_error("JackPosixMutex::Unlock res = %d", res);
128 } // namespace
130 #endif