아주 가끔씩 뮤텍스 안에서 처리한 작업의 결과값이 이상한 경우가 있더군요. 싱글 스레드에서는 정상적으로 동작했는데(이 또한 아주 낮은 확률로 일어나긴 합니다.) 스레드 개수가 늘어날 수록 발생 빈도가 높아집니다. 대체 왜 그러는 걸까요?
뮤텍스가 그럴리는 없죠 그 값을 뮤텍스 풀기전에 찍어보면 정확히 알겁니다.
아마.. 다른 참조에서 바꾸거나 하겠죠?
------------------------------------------------------------ ProgrammingHolic
우선 싱글 쓰레드에서라면 뮤텍스를 걸지 않아도 바뀔리가 없습니다. 아마 timer 핸들러 등에서 뭔가를 조작하는 것으로 보이네요. timer 핸들러에서 뮤텍스를 걸면 안되는 것은 참고하시고요.
혹시 크리티컬 섹션 내부 메모리 주소를 다른 쓰레드에서 참조하나요?
뮤택스는 크리티컬 섹션에 진입하는 컨택스트를 막고/열고 해서 해당 코드의 동작을 아토믹하게 보장해 주는 것이지 크리티컬 섹션 내부의 데이터를 보호하는 것이 아닙니다.
---------------------- 얇은 사 하이얀 고깔은 고이 접어서 나빌레라
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
뮤텍스가 그럴리는 없죠
뮤텍스가 그럴리는 없죠
그 값을 뮤텍스 풀기전에 찍어보면 정확히 알겁니다.
아마.. 다른 참조에서 바꾸거나 하겠죠?
------------------------------------------------------------
ProgrammingHolic
우선 싱글 쓰레드에서라면 뮤텍스를 걸지 않아도
우선 싱글 쓰레드에서라면 뮤텍스를 걸지 않아도 바뀔리가 없습니다. 아마 timer 핸들러 등에서 뭔가를 조작하는 것으로 보이네요. timer 핸들러에서 뮤텍스를 걸면 안되는 것은 참고하시고요.
혹시 크리티컬 섹션 내부 메모리 주소를 다른
혹시 크리티컬 섹션 내부 메모리 주소를 다른 쓰레드에서 참조하나요?
뮤택스는 크리티컬 섹션에 진입하는 컨택스트를 막고/열고 해서 해당 코드의 동작을 아토믹하게 보장해 주는 것이지 크리티컬 섹션 내부의 데이터를 보호하는 것이 아닙니다.
----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라
댓글 달기