다음과 같이 lock 구문 블록을 이용하면 별도의 unlock()을 호출하지 않아도 구문 블록을 나갈 때 자동으로 잠금 해제가 됩니다.
// C# 코드 object = new object(); lock( ) { read( ); write( ); sum( ); }
C++에서는 lock, unlock을 다음과 같이 합니다.
1. 보호하려는 변수들을 위한 뮤텍스용 객체 mutex를 생성합니다. std::recursive_mutex나 std::mutex를 사용합니다.
2. mutex 객체를 lock() 함수로 잠급니다.
3. 다 쓰고 나면 unlock() 함수로 잠금을 해제합니다.
다음과 같이 지역 변수 lock_guard를 이용하면 unlock을 따로 호출하지 않아도 그 지역 변수가 사라질 때 자동으로 잠금 해제가 됩니다.
// C++ 코드 std::mutex mx; { std::lock_guard<std::mutex> lock(mx); read(x); write(y); sum(x); }