00001 #ifndef QRK_SEMAPHORE_H
00002 #define QRK_SEMAPHORE_H
00003
00015 #include <memory>
00016
00017
00018 namespace qrk
00019 {
00023 class Semaphore
00024 {
00025 Semaphore(void);
00026 Semaphore(const Semaphore& rhs);
00027 Semaphore& operator = (const Semaphore& rhs);
00028
00029 struct pImpl;
00030 const std::auto_ptr<pImpl> pimpl;
00031
00032 public:
00038 explicit Semaphore(size_t initial_value);
00039 ~Semaphore(void);
00040
00041
00047 void wait(void);
00048
00049
00058 bool tryWait(void);
00059
00060
00066 void post(void);
00067
00068
00074 size_t value(void);
00075 };
00076 }
00077
00078 #endif