Windows NT 4.0 source code leak
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
// RWSync.h -- Defines the CRWSync class.
#ifndef __RWSYNC_H__
#define __RWSYNC_H__
class CRWSync { public:
// Constructor --
CRWSync(); // Destructor --
~CRWSync(); // Access Functions --
// The CRWSync class provides sychronization between read and write transactions.
//
// A read transaction is bracketed by calls to BeginRead and EndRead. During a
// read transaction no write transactions are allowed. This insures that all of
// the data read during a transaction is mutually consistent. Note that read
// transactions do not conflict with each other. Thus any number of read
// transactions may be active simultaneously.
//
// A write transaction is bracketed by calls to BeginWrite and EndWrite. During a
// write transaction no read transactions are allowed. That's because a write
// transaction usually involves a sequence of changes which make the target data
// object temporarily inconsistent. When a write transaction completes the target
// data is presumed to be internally consistent.
//
// At most one write transaction may be active at a time. Subsequent calls to
// BeginWrite will pend util the preceding write transactions complete.
//
// When contention occurs, write transactions will be given priority over read
// transactions.
ULONG BeginRead(); void EndRead();
inline ULONG BeginWrite() { return HoldForWriting(FALSE); }
void EndWrite();
enum { STARTED= 0, SHUTDOWN= 1 };
protected:
ULONG HoldForWriting(BOOL fForced);
private:
CRITICAL_SECTION m_cs;
ULONG m_cWritersWaiting; HANDLE m_hEvWriters; // AutoReset
ULONG m_cReadersActive; ULONG m_cReadersWaiting; HANDLE m_hEvReaders; // Manually Reset
BOOL m_fState;
enum { INACTIVE = 0, READER_WAITING = 0x1, READER_ACTIVE = 0x2, WRITER_WAITING = 0x4, WRITER_ACTIVE = 0x8, SHUTTING_DOWN = 0x10 }; };
#endif // __RWSYNC_H__
|