안녕하세요,
재재입니다.
이번 포스팅에서는
c++ mutable 사용하는 이유를 설명합니다.
(1) c++ mutable 어디에 사용하나요?
c++ mutable 은 mutex (mutual exclusion) 를 사용하는 코드에서 사용합니다.
왜 mutex 를 사용하는 이유는 뭘까요?
mutex 가 필요한 이유는,
멀티 스레딩 환경일 때 자원간 점유 문제 때문입니다.
- 멀티 스레딩 환경에서 자원을 공유 할 때,
동시에 여러 스레드가 점유를 하면 문제가 생길 수 있습니다. - 따라서 하나의 스레드가 점유하고 있으면,
다른 스레드들은 해당 자원을 사용하기 위해 대기해야합니다. - 그 과정에서 동기화도 필요합니다.
https://en.cppreference.com/w/cpp/thread/mutex
(2) c++ mutable 사용하는 이유는?
C++에서 mutable keyword 를 사용하는 이유를 정리해본다면,
아래와 같습니다.
- 상태 변경을 숨길 수 있습니다.
클래스의 멤버 변수가 외부에서 직접 변경되는 것을 막을 수 있고,
내부에서만 변경되도록 하고 싶은 경우에 mutable을 사용할 수 있습니다.
특히, const 인 멤버변수도 바꿀 수 있습니다. - mutex 에 mutable 을 사용하지 않으면,
mutex lock 을 사용 할 수 없으며 상황에 따라 Compile Error 가 발생합니다.
1번에서 const 인 멤버변수를 바꾸는 것은 일반적인 경우는 아니기 때문에,
참고만 하셔도 될 것 같습니다.
(3) 결론
c++ mutable 은 코드에 안전성을 높이기 위해 활용하며,
c++ mutable 은 결국 mutex 와 같이 사용되어야 합니다.
mutex 예제 코드 도 확인해보세요!
c++ mutable 사용하는 이유