안녕하세요,
재재입니다.
이번 포스팅에서는,
c++ mutex 변수 2개이상 사용하는 경우에 대해 알아볼게요.
mutex 변수의 역할은 뭐지,
어떤 경우에 mutex 변수 여러개 사용하는지 알아보겠습니다.
(1) c++ mutex 변수의 역할
mutex 변수에 대해 알아 보기전에,
관련 포스팅 안내 드립니다.
mutex 변수가 하고자 하는 것은 뭘까요?
- 공유자원에 대한 보호
- 여러 스레드에서 접근하지 못하도록 제한
결국, thread 간 동기화를 위해 우리는 mutex 변수를 사용합니다.
https://en.cppreference.com/w/cpp/thread/mutex
(2) 공유자원 1개에 mutex 몇개를 써야하는가?
일반적으로,
mutex 변수는 1개의 공유자원에 1개씩 설정되어야 합니다.
다시 말해서 보호해야하는 공유자원의 갯수가 늘었다면,
mutex 변수의 갯수도 같이 늘어나야 합니다.
하지만, 반드시 공유자원 1개에 mutex 를 1개 써야하는 것은 아닙니다.
(3) 공유자원 1개에 mutex 2개 사용하는 경우
첫번째, 읽기 및 쓰기 모두 제어가 필요한 경우 mutex 변수는 2개를 사용해야합니다.
(이 경우, 읽는 동안에도 사용 할 수 있고 쓰는 동안에도 사용 할 수 있습니다.)
mutex 제어를 통해 thread 가 일을 수행하지 못해서,
성능이 떨어지는 경우도 있습니다. 이럴때 특히 2개의 변수가 사용 될 필요가 있습니다.
두번째, 작업에 대한 분리가 필요할 때 2개 혹은 그 이상 사용 할 수 있습니다.
첫번째와 두번째 케이스 모두 동시성을 향상시키기 때문에 의미가 있습니다.
다만, 주의해야하는 부분이 있겠죠?
(4) mutex 사용 시 주의사항
mutex 사용에 있어서 주의해야하는 내용을 설명드릴게요.
- 생성한 mutex lock 은 반드시 해제되어야 합니다.
단, std::unique_lock 과 같은 객체를 사용하면 별도로 해제할 필요가 없습니다. - mutex 에 대한 제어를 잘못한다면 dead lock 문제가 발생되며,
segmentation faults 혹은 무한 대기에 빠질 수 있습니다. - mutex 를 여러개 사용하는 경우에는 특히 해제를 신경 써주세요.
(5) 결론
c++ 에서 뿐만 아니라, mutex 는 반드시 목적에 맞게 사용되어야 합니다.
공유자원의 특성에 따라 mutex 변수의 갯수를 설정해주시면 되겠습니다.
신중하게 mutex 를 사용하시어, 안전한 코드 작성하시길 바랍니다.