레이스 컨디션이있는 코드가 있습니다 ... 컨디션이 일관되게 발생하지 않기 때문에 경쟁 조건이라는 것을 알고 있으며, 듀얼 코어 머신에서 자주 발생하는 것으로 보입니다 .레이스 컨디션을 찾는 방법
추적 할 때 절대로 발생하지 않습니다. 하지만 교착 상태에 빠질 가능성도 있습니다. 이것이 발생하거나 발생하지 않는 로그의 완료 단계를 분석함으로써이 버그를 단일 기능으로 찾아 낼 수있었습니다. 그러나, 나는 함수의 범위에서 이것이 어디에서 일어나고 있는지 모른다. 최상위 수준이 아닙니다.
로그 명령문이나 중단 점을 추가하면 경쟁 조건 인 경우 타이밍이 변경되어이 문제가 발생하지 않습니다.
어디에서 이것이 일어나고 있는지 정확히 알려주는 경쟁 조건 분석기를 얻는 데 사용할 수있는 기법이 있습니까?
이것은 Visual Studio 9에서 C++ (비 관리 형)입니다.
마지막으로, 나는 로컬 알고 :
당신은
이 예제
-fsanitize=thread
플래그를 사용하여 코드를 컴파일 . 나는 그것을 "구식 방식"으로하고 콜링 트리를 그래프로 작성하고 손으로 각 통화의 잠금 시간을 강조 표시했습니다. 필자의 경우 2 개의 소스 파일과 소수의 기능으로 이전되었지만 매우 귀중한 것으로 입증되었습니다. –