뮤텍스 안에서 값이 보호가 안되는 경우가 있을까요?

익명 사용자의 이미지

아주 가끔씩 뮤텍스 안에서 처리한 작업의 결과값이 이상한 경우가 있더군요. 싱글 스레드에서는 정상적으로 동작했는데(이 또한 아주 낮은 확률로 일어나긴 합니다.) 스레드 개수가 늘어날 수록 발생 빈도가 높아집니다. 대체 왜 그러는 걸까요?

swish95의 이미지

뮤텍스가 그럴리는 없죠
그 값을 뮤텍스 풀기전에 찍어보면 정확히 알겁니다.

아마.. 다른 참조에서 바꾸거나 하겠죠?

------------------------------------------------------------
ProgrammingHolic

라스코니의 이미지

우선 싱글 쓰레드에서라면 뮤텍스를 걸지 않아도 바뀔리가 없습니다. 아마 timer 핸들러 등에서 뭔가를 조작하는 것으로 보이네요. timer 핸들러에서 뮤텍스를 걸면 안되는 것은 참고하시고요.

나빌레라의 이미지

혹시 크리티컬 섹션 내부 메모리 주소를 다른 쓰레드에서 참조하나요?

뮤택스는 크리티컬 섹션에 진입하는 컨택스트를 막고/열고 해서 해당 코드의 동작을 아토믹하게 보장해 주는 것이지 크리티컬 섹션 내부의 데이터를 보호하는 것이 아닙니다.

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라