xref: /haiku/headers/private/shared/PthreadMutexLocker.h (revision 71364193839bcbefb2df5223133f901e25c3a99f)
1*71364193SIngo Weinhold /*
2*71364193SIngo Weinhold  * Copyright 2013, Haiku, Inc. All Rights Reserved.
3*71364193SIngo Weinhold  * Distributed under the terms of the MIT License.
4*71364193SIngo Weinhold  *
5*71364193SIngo Weinhold  * Authors:
6*71364193SIngo Weinhold  *		Ingo Weinhold <ingo_weinhold@gmx.de>
7*71364193SIngo Weinhold  */
8*71364193SIngo Weinhold #ifndef _PTHREAD_MUTEX_LOCKER_H
9*71364193SIngo Weinhold #define _PTHREAD_MUTEX_LOCKER_H
10*71364193SIngo Weinhold 
11*71364193SIngo Weinhold 
12*71364193SIngo Weinhold #include <pthread.h>
13*71364193SIngo Weinhold 
14*71364193SIngo Weinhold #include <AutoLocker.h>
15*71364193SIngo Weinhold 
16*71364193SIngo Weinhold 
17*71364193SIngo Weinhold namespace BPrivate {
18*71364193SIngo Weinhold 
19*71364193SIngo Weinhold 
20*71364193SIngo Weinhold class AutoLockerMutexLocking {
21*71364193SIngo Weinhold public:
22*71364193SIngo Weinhold 	inline bool Lock(pthread_mutex_t* lockable)
23*71364193SIngo Weinhold 	{
24*71364193SIngo Weinhold 		return pthread_mutex_lock(lockable) == 0;
25*71364193SIngo Weinhold 	}
26*71364193SIngo Weinhold 
27*71364193SIngo Weinhold 	inline void Unlock(pthread_mutex_t* lockable)
28*71364193SIngo Weinhold 	{
29*71364193SIngo Weinhold 		pthread_mutex_unlock(lockable);
30*71364193SIngo Weinhold 	}
31*71364193SIngo Weinhold };
32*71364193SIngo Weinhold 
33*71364193SIngo Weinhold 
34*71364193SIngo Weinhold typedef AutoLocker<pthread_mutex_t, AutoLockerMutexLocking> PthreadMutexLocker;
35*71364193SIngo Weinhold 
36*71364193SIngo Weinhold 
37*71364193SIngo Weinhold }	// namespace BPrivate
38*71364193SIngo Weinhold 
39*71364193SIngo Weinhold using BPrivate::PthreadMutexLocker;
40*71364193SIngo Weinhold 
41*71364193SIngo Weinhold 
42*71364193SIngo Weinhold #endif	// _PTHREAD_MUTEX_LOCKER_H
43