autolock class 예제

본 포스트는 windows 환경에서 mutex를 사용한 autolock class 예제다.


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();
    }
};


사용법은 user_lock 선언 후 lock을 걸고 싶은 함수에서 아래 코드와 같이 사용하면 된다.

class foo
{
private:
    user_lock m_lock;

public:
    void foo1();
};


void foo::foo1()
{
    CUserAutoLock lock(&m_lock);

    do_something();
}

댓글

이 블로그의 인기 게시물

간단한 cfar 알고리즘에 대해

windows에서 간단하게 크롬캐스트(Chromecast)를 통해 윈도우 화면 미러링 방법

쉽게 설명한 파티클 필터(particle filter) 동작 원리와 예제

base64 인코딩 디코딩 예제 c 소스

간단한 칼만 필터(Kalman Filter) 소스 코드와 사용 예제