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

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

안드로이드(android) 전체 화면 시계 앱(clock app) 예제 코드

mkfs.fat Device or resource busy 에러 해결법