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)를 통해 윈도우 화면 미러링 방법

아두이노(arduino) 심박센서 (heart rate sensor) 심박수 측정 example code

리눅스에서 source insight 대신 사용하는 어플 Geany

python ctypes LoadLibrary로 windows dll 로드 및 함수 호출 예제