2007년 06월 08일
멀티 스레드 환경에서의 STL
이전에 STL 스레드 문제로 포스팅을 한적이 있다.
Is STL Queue Thread Safe?
그런데 또 같은이유에서 삽질을 하고 말았다.. 사실 사소한 실수에서 비롯한것이지만..
한쪽의 스레드는 List Map을 참조하여 Text를 그리고 한쪽에서는 삭제또는 추가를 하는 형태가 있다.
처음에는 자주 발생하지 않아서 무시하고 있었지만.. 좀 고쳐보자는 생각으로 매달렸다..
삽입과 삭제가 반복되면서 메모리 참조에러가 발생.. 아무래도 Thread Safe에 관련된것이 아닌가 해서 Critical Section에 등록하였다..
그런데 계속 같은 현상이 발생하는 것이다. 그래서 좀더 고민을 해봤는데 왠지 Map안에 쓰인 구조체중에 std::string을 사용하는 부분이 있다. 여기서 메모리 참조가 발생하길래.. 아무래도 메모리 해제를 제대로 못해줘서 그런게 아닌가 했다..
그래서 직접 내가 메모리를 관리하고자 모든 루틴을 TCHAR* 형으로 바꿔 주었다.. (몇시간 걸린듯하다.. ㅠ_ㅠ)
고치고 나서 이제 되겠지하는 생각에 프로그램을 돌렸는데.. 럴수.. 이럴수..
또 똑같은 현상이 었다.. ㅠ_ㅠ
이렇게 삽질을 거듭한끝에 발견했다...Critical Section에 들어가는 키값을 다른 것을 주었던 것이다..!!!!
OTL....
그렇다.. 다 삽질이었던 것이다..
결국 키값을 바꿈으로써 말끔히 해결... 그냥 예전 소스로 돌려버렸다..(고맙다 Subversion ,,)
키값을 잘못 넣은 사소한 실수였지만 결론은 STL에 관련한 것이다.
항상 주의하자.. STL은 스레드에 안전하지 않다구...!
# by | 2007/06/08 17:46 | C++/MFC | 트랙백 | 덧글(2)





☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
저도 가끔식 STL을 이용하지만
쓰레드에서 MAP을 사용했을때의 엄청난 누수로 고생했었던 기억이 ㅋ~
안에 new로 할당한부분은 다 처리 해줘야 하더군요...
그때 엄청난 메모리 사용으로 고생했었어요..ㅋㅋ