여러 스레드가 동기화 없이 const 멤버 함수를 호출하는 것은 읽기 연산을 하는 것이기 때문에 안전한 일이다.

하지만 mutable에 의해 값의 수정이 가능해지는 경우에는 더이상 스레드에 안전해지지 않는다.

이런 경우 atomic 또는 뮤텍스로 동기화를 해주어야 한다.

 

동기화가 필요한 변수 하나 또는 메모리 장소 하나에 대해서는 atomic이 적합하지만 둘 이상의 변수나 메모리 장소를 하나의 단위로서 조작해야 하는 경우에는 뮤텍스를 사용하는 것이 바람직하다.

 

또한 const 멤버 함수가 언제라도 동시적 실행 상황에 처할 것이라고 가정하는 것이 안전하다.

 

◾ 동시적 문맥에서 쓰이지 않을 것이 확실한 경우가 아니라면, const 멤버 함수는 스레드에 안전하게 작성하라.

◾ std::atomic 변수는 뮤텍스에 비해 성능상의 이점이 있지만, 하나의 변수 또는 메모리 장소를 다룰 때에만 적합하다.

+ Recent posts