xref: /haiku/src/apps/installer/SemaphoreLocker.h (revision 1e60bdeab63fa7a57bc9a55b032052e95a18bd2c)
1 /*
2  * Copyright 2008-2009, Stephan Aßmus <superstippi@gmx.de>
3  *  All rights reserved. Distributed under the terms of the MIT License.
4  */
5 #ifndef _SEMAPHORE_LOCKER_H
6 #define _SEMAPHORE_LOCKER_H
7 
8 
9 #include "AutoLocker.h"
10 
11 
12 class SemaphoreLocking {
13 public:
14 	inline bool Lock(sem_id* lockable)
15 	{
16 		return acquire_sem(*lockable) == B_OK;
17 	}
18 
19 	inline void Unlock(sem_id* lockable)
20 	{
21 		release_sem(*lockable);
22 	}
23 };
24 
25 
26 class SemaphoreLocker : public AutoLocker<sem_id, SemaphoreLocking> {
27 public:
28 	inline SemaphoreLocker(sem_id semaphore, bool alreadyLocked = false,
29 			bool lockIfNotLocked = true)
30 		:
31 		AutoLocker<sem_id, SemaphoreLocking>(),
32 		fSem(semaphore)
33 	{
34 		SetTo(&fSem, alreadyLocked, lockIfNotLocked);
35 	}
36 
37 private:
38 	sem_id	fSem;
39 };
40 
41 #endif // _SEMAPHORE_LOCKER_H
42