00001
00030 #ifndef INC_MI32_READWRITELOCK_H
00031 #define INC_MI32_READWRITELOCK_H
00032
00033 #ifndef INC_MI32_STDDEFNS_H
00034 #include <mi32/stddefns.h>
00035 #endif
00036
00037 #ifdef MISYSTEMDLL
00038 #define CLASSLIBEXPORT MI_DLLCLASSEXPORT
00039 #else
00040 #define CLASSLIBEXPORT MI_DLLCLASSIMPORT
00041 #endif
00042
00043 namespace MITHREAD {
00044
00047 class CLASSLIBEXPORT READWRITESYNC {
00048 private:
00049 #ifndef GENERATING_DOXYGEN_OUTPUT
00050 class PRIV;
00051 #endif // GENERATING_DOXYGEN_OUTPUT
00052
00053 public:
00056 class CLASSLIBEXPORT READLOCK {
00057 public:
00059 READLOCK (
00060 );
00061
00063 READLOCK (
00064 READWRITESYNC& rwsync,
00065 bool bInitialLock = true,
00066 bool bTryLock = false
00067 );
00068
00070 ~READLOCK (
00071 );
00072
00074 bool IsLocked (
00075 ) const { return (m_bIsLocked); }
00076
00078 void Lock (
00079 );
00080
00082 void Lock (
00083 READWRITESYNC& rwsync
00084 );
00085
00089 bool TryLock (
00090 );
00091
00095 bool TryLock (
00096 READWRITESYNC& rwsync
00097 );
00098
00100 void Unlock (
00101 );
00102
00103 private:
00104 #ifndef GENERATING_DOXYGEN_OUTPUT
00105 PRIV* m_pPriv;
00106 bool m_bIsLocked;
00107
00108 READLOCK (const READLOCK& rhs);
00109 READLOCK& operator=(const READLOCK& rhs);
00110 #endif // GENERATING_DOXYGEN_OUTPUT
00111 };
00112
00113
00116 class CLASSLIBEXPORT WRITELOCK {
00117 public:
00119 WRITELOCK (
00120 );
00121
00124 WRITELOCK (
00125 READWRITESYNC& rwsync,
00126 bool bInitialLock = true,
00127 bool bTryLock = false
00128 );
00129
00131 ~WRITELOCK (
00132 );
00133
00135 bool IsLocked (
00136 ) const { return (m_bIsLocked); }
00137
00139 void Lock (
00140 );
00141
00143 void Lock (
00144 READWRITESYNC& rwsync
00145 );
00146
00150 bool TryLock (
00151 );
00152
00156 bool TryLock (
00157 READWRITESYNC& rwsync
00158 );
00159
00161 void Unlock (
00162 );
00163
00164 private:
00165 #ifndef GENERATING_DOXYGEN_OUTPUT
00166 PRIV* m_pPriv;
00167 bool m_bIsLocked;
00168
00169 WRITELOCK (const WRITELOCK& rhs);
00170 WRITELOCK& operator=(const WRITELOCK& rhs);
00171 #endif // GENERATING_DOXYGEN_OUTPUT
00172 };
00173
00175 READWRITESYNC (
00176 bool bSupportRecursion = false
00177
00178
00179 );
00180
00182 ~READWRITESYNC (
00183 );
00184
00185 private:
00186 #ifndef GENERATING_DOXYGEN_OUTPUT
00187 PRIV* m_pPriv;
00188
00189 READWRITESYNC (const READWRITESYNC& rhs);
00190 READWRITESYNC& operator=(const READWRITESYNC& rhs);
00191
00192 friend class READLOCK;
00193 friend class WRITELOCK;
00194 #endif // GENERATING_DOXYGEN_OUTPUT
00195 };
00196
00197 }
00198
00199 #undef CLASSLIBEXPORT
00200 #endif