해당 범위를 벗어나면 락을 해제하는 패턴.
예제 1 ) Scoped Locking 패턴을 사용하지 않은 예제
변수 m 은 뮤텍스.
예제 2 ) Scoped Locking 패턴을 사용한 예제
변수 m 은 뮤텍스.
예제 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; }