定义部分:
// CThCriticalSectionObj
class CThCriticalSectionObj
{
public:
CThCriticalSectionObj();
~CThCriticalSectionObj();
void Acquire();
void Release();
private:
CThCriticalSectionObj(const CThCriticalSectionObj &);
CThCriticalSectionObj & operator = (const CThCriticalSectionObj &);
private:
#ifdef WIN32
CRITICAL_SECTION m_obj;
#else
pthread_mutex_t m_obj;
#endif
};
实现部分:
//
// CThCriticalSectionObj
CThCriticalSectionObj::CThCriticalSectionObj()
{
#ifdef WIN32
::InitializeCriticalSection(&m_obj);
#else
pthread_mutexattr_t attr;
pthread_mutexattr_init(&attr);
pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_PRIVATE);
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
pthread_mutex_init(&m_obj, &attr);
pthread_mutexattr_destroy(&attr);
#endif
}
CThCriticalSectionObj::~CThCriticalSectionObj()
{
#ifdef WIN32
::DeleteCriticalSection(&m_obj);
#else
pthread_mutex_destroy(&m_obj);
#endif
}
void CThCriticalSectionObj::Acquire()
{
#ifdef WIN32
::EnterCriticalSection(&m_obj);
#else
pthread_mutex_lock(&m_obj);
#endif
}
void CThCriticalSectionObj::Release()
{
#ifdef WIN32
::LeaveCriticalSection(&m_obj);
#else
pthread_mutex_unlock(&m_obj);
#endif
}