利用构造函数与析构函数的自动锁来实现对函数段的互斥访问
CCriticalSectionLock.h
class CCriticalSectionLock
{
public:
// Constructor
CCriticalSectionLock();
// Destructor
~CCriticalSectionLock();
// Lock section
void Lock();
// Unlock section
void Unlock();
protected:
CRITICAL_SECTION m_csLock;
};
/CCriticalSectionLock.cpp
CCriticalSectionLock::CCriticalSectionLock()
{
::InitializeCriticalSection( &m_csLock );
}
CCriticalSectionLock::~CCriticalSectionLock()
{
::DeleteCriticalSection( &m_csLock );
}
void CCriticalSectionLock::Lock()
{
::EnterCriticalSection( &m_csLock );
}
void CCriticalSectionLock::Unlock()
{
::LeaveCriticalSection( &m_csLock );
}
///
AutoLock.h
template <class LockType>
class CAutoLock
{
public:
typedef CAutoLock<LockType> my_type;
typedef LockType lock_type;
public:
// Constructor
inline CAutoLock(lock_type& lock)
{
m_pLock = &lock;
m_pLock->Lock();
}
// Destructor
inline ~CAutoLock(void)
{
m_pLock->Unlock();
}
protected:
lock_type* m_pLock; // LockObject
private:
// Constructor
CAutoLock(const CAutoLock& lock);
CAutoLock& operator=(const CAutoLock& rsh);
};
///USE CASE
// Define the lock type
typedef CCriticalSectionLock lock_type ;
// Define the automatically lock type typedef CAutoLock<lock_type> autolock_type
typedef CAutoLock<lock_type> autolock_type ;
// Define the variable for automatically lock
lock_type m_Lock ;
fun()
{
autolock_type lock( m_Lock );
if ()
{
return;
}
else
{
return;
}
...
return;
}