autolock class 예제
본 포스트는 windows 환경에서 mutex를 사용한 autolock class 예제다.
사용법은 user_lock 선언 후 lock을 걸고 싶은 함수에서 아래 코드와 같이 사용하면 된다.
class user_lock
{
private:
HANDLE m_hmutex;
public:
user_lock()
{
m_hmutex = CreateMutex(NULL, FALSE, NULL);
}
~user_lock()
{
if (m_hmutex)
{
CloseHandle(m_hmutex);
m_hmutex = NULL;
}
}
void lock()
{
if (m_hmutex)
{
WaitForSingleObject(m_hmutex, INFINITE);
}
}
void unlock()
{
if (m_hmutex)
{
ReleaseMutex(m_hmutex);
} }
};
class CUserAutoLock
{
private:
user_lock *m_plock;
public:
CUserAutoLock(user_lock *lock)
{
m_plock = lock;
if (m_plock) m_plock->lock();
}
~CUserAutoLock()
{
if (m_plock) m_plock->unlock();
}
};
{
private:
HANDLE m_hmutex;
public:
user_lock()
{
m_hmutex = CreateMutex(NULL, FALSE, NULL);
}
~user_lock()
{
if (m_hmutex)
{
CloseHandle(m_hmutex);
m_hmutex = NULL;
}
}
void lock()
{
if (m_hmutex)
{
WaitForSingleObject(m_hmutex, INFINITE);
}
}
void unlock()
{
if (m_hmutex)
{
ReleaseMutex(m_hmutex);
} }
};
class CUserAutoLock
{
private:
user_lock *m_plock;
public:
CUserAutoLock(user_lock *lock)
{
m_plock = lock;
if (m_plock) m_plock->lock();
}
~CUserAutoLock()
{
if (m_plock) m_plock->unlock();
}
};
사용법은 user_lock 선언 후 lock을 걸고 싶은 함수에서 아래 코드와 같이 사용하면 된다.
class foo
{
private:
user_lock m_lock;
public:
void foo1();
};
void foo::foo1()
{
CUserAutoLock lock(&m_lock);
do_something();
}
{
private:
user_lock m_lock;
public:
void foo1();
};
void foo::foo1()
{
CUserAutoLock lock(&m_lock);
do_something();
}
댓글
댓글 쓰기