ThreadSanitizer가 255개 스레드 경계를 넘으면 데이터 레이스를 놓치는 이유
Data races and the limits of ThreadSanitizer in C and Go
C와 Go의 데이터 레이스를 잡아주는 ThreadSanitizer(TSan)는 LLVM 기반으로 널리 쓰이지만, 문서화가 부족하고 구조적 한계가 있다. 저자는 Python으로 C 코드를 해석하고 FastTrack 스타일 벡터 시계를 구현해 TSan의 동작 원리를 설명한다. 특히 TSan이 총 255개 스레드 경계를 넘으면 명백한 데이터 레이스를 놓칠 수 있으며, Go의 sync.Pool 설계상 두 고루틴 간 경쟁이 숨겨지는 시나리오도 소개한다.
TSan은 255개 총 스레드 경계를 넘어서는 동안 데이터 레이스를 안정적으로 보고할 수 없다.