해당 범위를 벗어나면 락을 해제하는 패턴.

예제 1 ) Scoped Locking 패턴을 사용하지 않은 예제
 변수 m 은 뮤텍스.

virtual int handle_data()
{
    while( log_record() != -1 )
    {
        if( m.acquire() == -1 ) return 0;
        ++request_count;    // 요청개수 증가
        m.release();        // 잠금해제
    }

    m.acquire();
    int cnt = request_count;
    m.release();
    cout << "request_count" = " << cnt << endl;
}

예제 2 ) Scoped Locking 패턴을 사용한 예제
 변수 m 은 뮤텍스.

virtual int handle_data()
{
    while( log_record() != -1 )
    {
        // 생성자에서 잠금 획득
        ACE_GUARD_RETURN ( ACE_Thread_Mutex, guard, m , -1 );
        ++request_count;    // 요청개수 증가
        // 소멸자에서 잠금 해제.
    }

    {
        // 생성자에서 잠금 획득
        ACE_GUARD_RETURN ( ACE_Thread_Mutex, guard, m , -1 );
        int cnt = request_count;
        // 소멸자에서 잠금 해제.
    }

    cout << "request_count" = " << cnt << endl;
}

+ Recent posts