STL 컨테이너가 쓰레드 안정성에 대한 기대는 현실에 맞추어 가자

SGI에서 제정한 STL 다중 쓰레딩 지원 항목







  • 여러 쓰레드에서 읽는 것은 안전하다.(Multiple readers are safe)
    하나 이상의 쓰레드가 하나의 컨테이너의 내용을 동시에 읽는 경우가 있는데, 제대로 동작합니다. 당연한 이야기지만 읽기 도중에 쓰기 종작이 수행되면 안됩니다.
  • 여거 쓰레드에서 다른 컨테이너에 쓰는 것은 안전하다.(Multiple writers to different containers are safe)
    하나 이상의 쓰레드가 다른 컨테이너에 동시에 쓸수 있다.


STL에서는 위에 써있는 당연한것 이외에는 다중 쓰레딩 환경에 대해 전혀 지원받을수 없으니 자체적으로 해결하는 것이 좋다.
클라이언트 코드레벨에서 뮤텍스나 크리티컬섹션을 처리해 주는 수밖에 없다.

Lock 클래스의 구현을 생각해 보는것도 좋다 Lock 클래스 같은 경우는 생성자에서 객체(일반적으로 컨테이너)를 받아 다른 쓰레드에서 사용 못하도록 처리하고 소멸자에서 잠근걸 푸는 형식이 일반적이다.
vector<int> v;

{
Lock(v); // 잠근다.
……
} // 자동으로 소멸.
위의 코드 같은 경우 예외 상황이 발생해도 소멸자의 호출은 보장하므로 v가 영원히 다른 쓰레드에서 사용못하게 되는 일은 없다.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다