Writing race-free concurrent code is hard. Debugging racy concurrent code is even harder. Race detectors are seriously cool tools that make both easy -- they detect the race conditions in a program.
But race conditions are arguably the most elusive programming errors, so how do race detectors detect them?
This talk will explore the internals of the Go race detector to answer that question. We will delve into the compiler instrumentation of the program, and the run-time module that detects data races. We will touch upon the optimizations that make the dynamic race detector practical for use in the real world, and evaluate how practical it really is.