더북(TheBook)

을 실행하다가 C++ 예외를 던지면(throw) ~은 실행되지 못합니다. 이를 해결하려면 try-catch 구문으로 감싸 예외가 발생하더라도 unlock()을 실행할 수 있게 해야 합니다. 벌써 귀찮지 않나요?

C++에서는 로컬 변수가 파괴될 때, 파괴자 함수에서 여러분이 원하는 코드가 실행되게 할 수 있습니다. 이를 이용하면 예외 던짐이 발생하더라도 파괴자 함수로 unlock()이 자동으로 실행될 것입니다.

C++에서는 뮤텍스 잠금 상태를 로컬 변수로 저장하고, 그 변수가 사라질 때 자동으로 잠금 해제가 되게 하는 클래스를 제공합니다. 바로 lock_guard입니다.

코드 lock_guard 사용 예

std::recursive_mutex mx;
lock_guard<recursive_mutex> lock(mx);
read(x);
write(x);
sum(x);

 

이렇게 하면 로컬 변수 lock 객체가 사라질 때 자동으로 mx.unlock()이 실행됩니다.

C# 언어에서는 lockunlock을 할 때 다음과 같이 합니다.

1. 보호하려는 변수 자체를 뮤텍스처럼 사용하여 잠급니다. 혹은 변수를 가리키는 임의의 객체를 따로 만들어 그 객체를 잠급니다(lock).

2. 다 쓰고 나면 잠금을 해제합니다(unlock).

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.