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

Eigen 라이브러리 matrix 사용법

카메라 인터페이스 MIPI CSI에 관하여