--- /dev/null
+/*
+This file is part of libmspframework
+Copyright © 2006 Mikko Rasa, Mikkosoft Productions
+Distributed under the LGPL
+*/
+#ifndef MSP_FRAMEWORK_SEMAPHORE_H_
+#define MSP_FRAMEWORK_SEMAPHORE_H_
+
+#include <pthread.h>
+#include "mutex.h"
+#include "../time/timedelta.h"
+
+namespace Msp {
+
+class Semaphore
+{
+public:
+#ifndef WIN32
+ Semaphore() { pthread_cond_init(&cond, 0); }
+ //Mutex &get_mutex() { return mutex; }
+ int signal() { MutexLock l(mutex); return pthread_cond_signal(&cond); }
+ int broadcast() { MutexLock l(mutex); return pthread_cond_broadcast(&cond); }
+ int wait() { mutex.lock(); return pthread_cond_wait(&cond, &mutex.mutex); }
+ int wait(const Time::TimeDelta &);
+ ~Semaphore() { pthread_cond_destroy(&cond); }
+#endif
+private:
+ Mutex mutex;
+ pthread_cond_t cond;
+};
+
+}
+
+#endif