00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #pragma once
00030 #ifndef __CSMUTEX_H__
00031 #define __CSMUTEX_H__
00032
00033 #include <pthread.h>
00034
00035 #include "CSDefs.h"
00036
00037 class CSThread;
00038
00039 class CSMutex {
00040 public:
00041 CSMutex();
00042 virtual ~CSMutex();
00043
00044 virtual void lock();
00045 virtual void unlock();
00046
00047 friend class CSLock;
00048 friend class CSSync;
00049
00050 private:
00051 pthread_mutex_t iMutex;
00052 #ifdef DEBUG
00053 CSThread *iLocker;
00054 public:
00055 bool trace;
00056 #endif
00057 };
00058
00059 class CSLock : public CSMutex {
00060 public:
00061 CSLock();
00062 virtual ~CSLock();
00063
00064 virtual void lock();
00065 virtual void unlock();
00066 virtual bool haveLock();
00067
00068 friend class CSSync;
00069
00070 private:
00071 CSThread *iLockingThread;
00072 int iLockCount;
00073 };
00074
00075 class CSSync : public CSLock {
00076 public:
00077 CSSync();
00078 virtual ~CSSync();
00079
00080
00081
00082
00083
00084
00085
00086
00087 virtual void wait();
00088
00089
00090
00091
00092 void wait(time_t mill_sec);
00093
00094
00095
00096
00097 virtual void wakeup();
00098
00099 private:
00100 pthread_cond_t iCondition;
00101 };
00102
00103 #endif
00104