더북(TheBook)

다음과 같이 lock 구문 블록을 이용하면 별도의 unlock()을 호출하지 않아도 구문 블록을 나갈 때 자동으로 잠금 해제가 됩니다.

// C# 코드
object mx = new object();
lock(mx)
{
  read(x);
  write(y);
  sum(x);
}

C++에서는 lock, unlock을 다음과 같이 합니다.

1. 보호하려는 변수들을 위한 뮤텍스용 객체 mutex를 생성합니다. std::recursive_mutexstd::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);
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.