stl map 스레드상에서 사용하는데 가끔 락 걸리는 현상
글쓴이: seonuny / 작성시간: 월, 2007/11/26 - 7:18오후
main 스레드에서만 읽고,쓰고,삭제가 일어나고
child 스레드 두개에서 읽기만 일어납니다.
보통때는 아무 이상이 없는데
가끔
map의 lowerbound 함수에서 락이 걸려서 움직이지를 않아요.
동작은
main 스레드에서 입력하면서 키값으로 시간을 입력 하고
child 스레드에서 현재 시간에서 특정 시간 만큼 뺀 값으로 lowerbound 함수를 이용해 값이 있으면
main과 공유하는 메모리에 세팅하고
세팅 값이 있으면
main에서 해당 값을 삭제 하는 방식 입니다.
입력 삭제가 빈번하게 일어 납니다.
여러번 테스트 하면서 확인 한것은
lowerbound 하기 전에 empty를 호출하여 true(값은 있음)를 리턴 하면
락이 걸리는 것을 확인 하였습니다.
같은 현상을 보신 분 있으시면 답글 부탁 드리겠습니다.
Forums:
혹시 map 읽거나 쓸 때
혹시 map 읽거나 쓸 때 동기화 하시나요?
한 스레드에서 쓰기만 하고 다른 스레드에서 읽기만 하더라도 mutex 등으로 보호해야 합니다.
자세한 내용은 http://www.sgi.com/tech/stl/thread_safety.html 에서 확인해보세요.
SGI 문서지만 표준에서도 비슷하게 규정한 것으로 알고 있습니다.
댓글 달기