[C++11 Overview] RAII Classes for Mutexes
Book Review 2013. 3. 11. 16:15RAII ( Resource Acquisition In Initialization ) 은 리소스 할당과 해제에 대해서
Bjarne StousStrup (C++ 창시자) 이 제안한 프로그래밍 방법론 입니다.
위키 참조 : Resource_Acquisition_Is_Initialization
RAII 에 대해서는 Channel 9 - Going Native 2012 에서도 Bjarne 자신이 직접
설명하고 있습니다. Keynote-Bjarne-Stroustrup-Cpp11-Style
아무튼 mutex 에 대한 RAII 클래스는 lock_guard 와 unique_lock 두 종류가 제공 되는데,
1. std::lock_guard
lock_quard 의 경우 별다른 추가적인 기능이 없는 대신 사용이 매우 간단하고 오버헤드도 적습니다.
기존에 프로그래머들이 곧잘 만들어 사용하던 auto lock 류들과 흡사합니다.
객체 생성 블럭구간에 lock 을 거는 것이죠.
lock_guard 는 copy 나 move 가 불가능하며 별도의 추가적인 기능은 없습니다.2. std::unique_lock
unique_lock 의 경우에는 좀 더 유연한 제어 방법들을 제공합니다. (그 만큼 어느 정도 오버헤드는 따라 붙지만...)
여기서 mutex 는 동일 코드를 재귀하기 때문에 recursive_timed_mutex 를 사용했고
lock 객체의 생성자에서 데드락이 걸리는 것을 방지 하기 위해 파라미터로 defer_lock 를 주었습니다.
위 코드를 실행 시키고 잠시 기다리면 처음 critical section 에 진입한 스레드 외에
나머지 스레드들은 "input timed out." 메시지를 출력하고 종료되고
한 스레드만 입력을 대기하고 있게 됩니다.
문자 하나를 입력해 주면 다으모가 같은 결과가 나오게 됩니다.
'Book Review' 카테고리의 다른 글
[TCP/IP 소켓프로그래밍 C#] TcpEchoClientAsync (0) | 2013.03.28 |
---|---|
[TCP/IP 소켓프로그래밍 C#] ItemQuoteEncoderText class (0) | 2013.03.21 |
[C++11 Overview] mutex (0) | 2013.03.11 |
[C++11 Overview] void future (0) | 2013.03.11 |
[C++11 Overview] Uniform Initialization Syntax (0) | 2013.02.22 |