00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
#ifndef WT_RRWMUTEX_H
00023
#define WT_RRWMUTEX_H
00024
00025
#include <wefts_rwmutex.h>
00026
#ifndef NO_ASSERTIONS
00027
#include <cassert>
00028
#endif
00029
00030
namespace Wefts {
00031
00058 class RRWMutex:
public RWMutex {
00059
private:
00060 int m_fence;
00061 OSThread m_owner;
00062
00063
public:
00065 RRWMutex():
RWMutex() {
00066
m_fence = 0;
00067 }
00068
00090
virtual bool lockRead(
double seconds=0.0 );
00091
00095
virtual bool tryLockRead();
00096
00114
virtual bool promoteFence(
double time = 0.0,
bool fence=
true )
00115
throw(
InvalidError );
00116
00126 virtual bool promote(
double time = 0.0 )
throw(
InvalidError )
00127 {
00128
return promoteFence( time,
false );
00129 }
00130
00131
00144
virtual bool lockWriteFence(
double time =0.0,
bool fence =
true);
00145
00152 virtual bool lockWrite(
double seconds=0.0 ) {
00153
return lockWriteFence( seconds,
false );
00154 }
00155
00156
00175
void degrade() throw(
InvalidError );
00176
00184 virtual
void unlock() throw( InvalidError );
00185
00186 virtual
void handleCleanup(
int code,
void *caller = 0 );
00187 };
00188
00189 }
00190
00191 #endif
00192