더북(TheBook)

1.6 임계 영역과 뮤텍스

 

 

경쟁 상태를 해결하는 여러 방법 중 하나는 다음과 같습니다.

“스레드에서 어떤 정보 X를 사용하고 있는 동안 다른 스레드는 X를 건드리지 못하게 한다!”

좀 더 정확히 말하자면 다음과 같습니다.

“다른 스레드는 X를 건드리려고 하면 기다린다. 현재 스레드가 X를 다 사용할 때까지!”

이때 사용하는 것이 뮤텍스(mutex)입니다. 뮤텍스는 상호 배제(mutual exclusion)의 줄임말이며, 뮤텍스를 사용하는 방법은 다음과 같습니다.

1. X, Y를 보호하는 뮤텍스 MX를 만듭니다.

2. 스레드는 X, Y를 건드리기 전에 MX에 “사용권을 얻겠다.”라고 요청합니다.

3. 스레드는 X, Y를 액세스합니다.

4. 액세스가 끝나면 MX에 “사용권을 놓겠다.”라고 요청합니다.

이를 코드로 표현하면 다음과 같습니다.

코드 뮤텍스의 C++ 표준 객체 std::mutex 사용 예

std::mutex mx;   // ➊
lock();          // ➋
read(x);         // ➌
write(y);        // ➌
sum(x);          // ➌
mx.unlock();     // ➍

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