Mutex.h
См. документацию.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00023
00024 #ifndef UniSet_MUTEX_H_
00025 #define UniSet_MUTEX_H_
00026
00027 #include <string>
00028 #include <omnithread.h>
00029 #include <signal.h>
00030
00031 namespace UniSetTypes
00032 {
00033 typedef volatile sig_atomic_t mutex_atomic_t;
00034
00035
00036
00043 class uniset_mutex
00044 {
00045 public:
00046 uniset_mutex();
00047 uniset_mutex( std::string name );
00048 ~uniset_mutex();
00049
00050 bool isRelease();
00051 void lock();
00052 void unlock();
00053
00054 inline std::string name()
00055 {
00056 return nm;
00057 };
00058
00059 protected:
00060
00061 private:
00062 friend class uniset_mutex_lock;
00063 uniset_mutex (const uniset_mutex& r);
00064 const uniset_mutex &operator=(const uniset_mutex& r);
00065 omni_condition* cnd;
00066 std::string nm;
00067 omni_semaphore sem;
00068 omni_mutex mtx;
00069 mutex_atomic_t locked;
00070 };
00071
00080 class uniset_mutex_lock
00081 {
00082 public:
00083 uniset_mutex_lock( uniset_mutex& m, int timeoutMS=0 );
00084 ~uniset_mutex_lock();
00085
00086 bool lock_ok();
00087
00088 private:
00089 uniset_mutex* mutex;
00090 mutex_atomic_t mlock;
00091 uniset_mutex_lock(const uniset_mutex_lock&);
00092 uniset_mutex_lock& operator=(const uniset_mutex_lock&);
00093 };
00094
00095
00096 class uniset_spin_mutex
00097 {
00098 public:
00099 uniset_spin_mutex();
00100 ~uniset_spin_mutex();
00101
00102 void lock( int check_pause_msec=1 );
00103 void unlock();
00104
00105 uniset_spin_mutex (const uniset_spin_mutex& r);
00106 const uniset_spin_mutex &operator=(const uniset_spin_mutex& r);
00107
00108 private:
00109 friend class uniset_spin_lock;
00110 mutex_atomic_t m;
00111 };
00112
00113 class uniset_spin_lock
00114 {
00115 public:
00116 uniset_spin_lock( uniset_spin_mutex& m, int check_pause_msec=1 );
00117 ~uniset_spin_lock();
00118
00119 private:
00120 uniset_spin_lock(const uniset_spin_lock&);
00121 uniset_spin_lock& operator=(const uniset_spin_lock&);
00122 uniset_spin_mutex& m;
00123 };
00124
00125 }
00126
00127 #endif