00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "tsemaphore.h"
00018
00019
00020 #if !USE_PRIVATE__POSIX_SEMAPHORES
00021 void Semaphore::post()
00022 {
00023 m.lock();
00024 ++v;
00025 c.broadcast();
00026 m.unlock();
00027 }
00028 #endif
00029
00030
00031 #if !USE_PRIVATE__POSIX_SEMAPHORES
00032 void Semaphore::wait()
00033 {
00034 m.lock();
00035 if(v)
00036 {
00037 --v;
00038 m.unlock();
00039 return;
00040 }
00041
00042
00043
00044 while(!v) c.wait(m);
00045
00046 m.unlock();
00047 }
00048 #endif
00049
00050
00051 #if !USE_PRIVATE__POSIX_SEMAPHORES
00052 bool Semaphore::test()
00053 {
00054 bool retval;
00055 m.lock();
00056 if(v)
00057 { --v; retval=0; }
00058 else
00059 { retval=1; }
00060 m.unlock();
00061 return(retval);
00062 }
00063 #endif