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