class_level_lock.h
Go to the documentation of this file.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
00039 #ifndef _CLASS_LEVEL_LOCK_H
00040 #define _CLASS_LEVEL_LOCK_H
00041
00042 #include "fast_mutex.h"
00043
00044 # ifdef _NOTHREADS
00045
00049 template <class _Host, bool _RealLock = false>
00050 class class_level_lock
00051 {
00052 public:
00054 class lock
00055 {
00056 public:
00057 lock() {}
00058 };
00059
00060 typedef _Host volatile_type;
00061 };
00062 # else
00063
00070 template <class _Host, bool _RealLock = true>
00071 class class_level_lock
00072 {
00073 static fast_mutex _S_mtx;
00074
00075 public:
00076 class lock;
00077 friend class lock;
00078
00080 class lock
00081 {
00082 lock(const lock&);
00083 lock& operator=(const lock&);
00084 public:
00085 lock()
00086 {
00087 if (_RealLock)
00088 _S_mtx.lock();
00089 }
00090 ~lock()
00091 {
00092 if (_RealLock)
00093 _S_mtx.unlock();
00094 }
00095 };
00096
00097 typedef volatile _Host volatile_type;
00098 };
00099
00100 # if HAS_CLASS_TEMPLATE_PARTIAL_SPECIALIZATION
00101
00102 template <class _Host>
00103 class class_level_lock<_Host, false>
00104 {
00105 public:
00107 class lock
00108 {
00109 public:
00110 lock() {}
00111 };
00112
00113 typedef _Host volatile_type;
00114 };
00115 # endif // HAS_CLASS_TEMPLATE_PARTIAL_SPECIALIZATION
00116
00117 template <class _Host, bool _RealLock>
00118 fast_mutex class_level_lock<_Host, _RealLock>::_S_mtx;
00119 # endif // _NOTHREADS
00120
00121 #endif // _CLASS_LEVEL_LOCK_H