Add missing methods in JackDebugClient(2).
[jack2.git] / posix / JackPosixMutex.h
blobd3985fbbb1f4340429e9653d66b2e4e47fd301a3
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 "JackException.h"
26 #include "JackCompilerDeps.h"
28 #include <pthread.h>
29 #include <stdio.h>
30 #include <assert.h>
32 namespace Jack
34 /*!
35 \brief Mutex abstraction.
38 class SERVER_EXPORT JackBasePosixMutex
41 protected:
43 pthread_mutex_t fMutex;
44 pthread_t fOwner;
46 public:
48 JackBasePosixMutex(const char* name = NULL):fOwner(0)
50 int res = pthread_mutex_init(&fMutex, NULL);
51 ThrowIf(res != 0, JackException("JackBasePosixMutex: could not init the mutex"));
54 virtual ~JackBasePosixMutex()
56 pthread_mutex_destroy(&fMutex);
59 bool Lock();
60 bool Trylock();
61 bool Unlock();
65 class SERVER_EXPORT JackPosixMutex
67 protected:
69 pthread_mutex_t fMutex;
71 public:
73 JackPosixMutex(const char* name = NULL)
75 // Use recursive mutex
76 pthread_mutexattr_t mutex_attr;
77 int res;
78 res = pthread_mutexattr_init(&mutex_attr);
79 ThrowIf(res != 0, JackException("JackBasePosixMutex: could not init the mutex attribute"));
80 res = pthread_mutexattr_settype(&mutex_attr, PTHREAD_MUTEX_RECURSIVE);
81 ThrowIf(res != 0, JackException("JackBasePosixMutex: could not settype the mutex"));
82 res = pthread_mutex_init(&fMutex, &mutex_attr);
83 ThrowIf(res != 0, JackException("JackBasePosixMutex: could not init the mutex"));
84 pthread_mutexattr_destroy(&mutex_attr);
87 virtual ~JackPosixMutex()
89 pthread_mutex_destroy(&fMutex);
92 bool Lock();
93 bool Trylock();
94 bool Unlock();
98 } // namespace
100 #endif