Leaked source code of windows server 2003
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.
|
|
//***************************************************************************
//
// Copyright � Microsoft Corporation. All rights reserved.
//
// ThrdBase.h
//
// Purpose: Definition of ThreadBase class
//
//***************************************************************************
#if _MSC_VER > 1000
#pragma once
#endif
#ifndef __THREADBASE_H__
#define __THREADBASE_H__
class POLARITY CThreadBase { public:
enum THREAD_SAFETY_MECHANISM { etsmFirst = 0, etsmSerialized = 0, etsmPriorityRead, etsmPriorityWrite, etsmLast };
// Construction/Destruction
CThreadBase( THREAD_SAFETY_MECHANISM etsm = etsmSerialized ); virtual ~CThreadBase();
// Thread Safe Ref/Counting functions
LONG AddRef( void ); LONG Release( void );
// Provide Readable Read/Write accessors should
// we not want to serialize at a later date. Note
// that timeouts have no meaning unless we're
// doing a non-serialized implementation.
BOOL BeginRead( DWORD dwTimeOut = INFINITE ); void EndRead( void );
BOOL BeginWrite( DWORD dwTimeOut = INFINITE ); void EndWrite( void );
protected:
virtual void OnFinalRelease( void );
// Thread Safety functions
private:
CRITICAL_SECTION m_cs; LONG m_lRefCount; THREAD_SAFETY_MECHANISM m_etsm;
// Private thread safety functions. We can maybe promote
// these to protected if we see a need to later, however
// for right now, everyone should specify if they mean
// to read or write when they wish to access data that
// may change.
void Lock( void ); void Unlock( void );
};
inline BOOL CThreadBase::BeginRead( DWORD dwTimeout /*=INFINITE*/ ) { EnterCriticalSection( &m_cs ); return TRUE; }
inline void CThreadBase::EndRead( void ) { LeaveCriticalSection( &m_cs ); }
inline BOOL CThreadBase::BeginWrite( DWORD dwTimeout /*=INFINITE*/ ) { EnterCriticalSection( &m_cs ); return TRUE; }
inline void CThreadBase::EndWrite( void ) { LeaveCriticalSection( &m_cs ); }
inline void CThreadBase::Lock( void ) { EnterCriticalSection( &m_cs ); }
inline void CThreadBase::Unlock( void ) { LeaveCriticalSection( &m_cs ); }
#endif
|