#include #include #include namespace icl{ class SemaphoreImpl{ public: inline SemaphoreImpl(int n):n(n){ ICLASSERT_RETURN(n>0); sem_init(&s,0,(unsigned int)n); } inline ~SemaphoreImpl(){ sem_destroy(&s); } inline void inc(int n=1){ for(int i=0;i(new SemaphoreImpl(n)){ } void Semaphore::operator++(int dummy){ (void)dummy; impl->inc(1); } void Semaphore::operator--(int dummy){ (void)dummy; impl->dec(1); } void Semaphore::operator+=(int val){ impl->inc(val); } void Semaphore::operator-=(int val){ impl->dec(val); } bool Semaphore::tryAcquire(){ return impl->tryAcquire(); } bool Semaphore::tryRelease(){ return impl->tryRelease(); } int Semaphore::getValue(){ return impl->getValue(); } int Semaphore::getMaxValue(){ return impl->getMaxValue(); } }