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

Embedded Linux USB Ethernet Gadget 사용하기

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

windows 10에서 스마트폰 미러링으로 화면 녹화