race diagnosis

경쟁 조건은 공유 쓰기와 끼어들기에서 시작된다

count++처럼 한 줄로 보이는 코드도 읽기, 수정, 쓰기로 나뉩니다. 같은 값을 여러 실행 흐름이 바꾸고 중간에 끼어들 수 있으면 동기화 문제가 됩니다.
경쟁 조건 판별표
질문 확인 기준 위험 신호 보호 방향
share 같은 데이터나 장치를 함께 보는가 전역 변수, heap 객체, file descriptor 소유권 분리 또는 접근 규칙 명시
write 하나 이상의 흐름이 값을 바꾸는가 읽기와 쓰기가 섞인 누적 연산 원자 연산 또는 임계 영역
interleave 중간 상태에 다른 흐름이 들어올 수 있는가 체크 후 사용, read-modify-write 검사와 수정을 한 구간으로 묶기
protect 보호 규칙이 모든 경로에 적용되는가 일부 함수만 lock을 잡는 구조 공통 API, lock order, sanitizer
mutual exclusion 같은 임계 영역은 동시에 통과하지 못해야 합니다.
progress 비어 있는데도 아무도 못 들어가는 설계는 실패입니다.
bounded waiting 특정 흐름이 계속 밀려나는 기아를 막아야 합니다.
tools ThreadSanitizer와 Helgrind로 실제 경합 지점을 찾습니다.