--- /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"
+
+namespace Msp {
+
+class Semaphore
+{
+public:
+ Semaphore() { pthread_cond_init(&cond, 0); }
+ Mutex &get_mutex() { return mutex; }
+ int signal() { return pthread_cond_signal(&cond); }
+ int broadcast() { return pthread_cond_broadcast(&cond); }
+ int wait() { return pthread_cond_wait(&cond, &mutex.mutex); }
+ ~Semaphore() { pthread_cond_destroy(&cond); }
+private:
+ Mutex mutex;
+ pthread_cond_t cond;
+};
+
+}
+
+#endif