-/*
-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"
+#ifndef MSP_CORE_SEMAPHORE_H_
+#define MSP_CORE_SEMAPHORE_H_
+
+#include <msp/time/timedelta.h>
+#include "noncopyable.h"
namespace Msp {
-class Semaphore
+class Semaphore: private NonCopyable
{
-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;
+ struct Private;
+
+ Private *priv = 0;
+
+public:
+ Semaphore(unsigned);
+ ~Semaphore();
+
+ void signal();
+ void wait();
+ bool wait(const Time::TimeDelta &);
};
}