]> git.tdb.fi Git - libs/core.git/blobdiff - source/core/semaphore.h
Rename to libmspcore
[libs/core.git] / source / core / semaphore.h
diff --git a/source/core/semaphore.h b/source/core/semaphore.h
new file mode 100644 (file)
index 0000000..75c51e6
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+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