Strange Loop

"go test -race" Under the Hood: An inside scoop on a tool that dynamically detects racy memory accesses

Writing correct concurrent code is hard. Debugging incorrect concurrent code is even harder. The Go race detector, introduced in Go version 1.1, is one cool tool that makes both easy to do in Go programs.

Race conditions are arguably the most elusive programming errors, so how does a tool that detects these across programs operate under the hood? In the case of the Go race detector, with compiler instrumentation of the program and a run-time library that watches for “racy” memory accesses. 

This talk will delve into the internals of the data race detector — both the instrumentation by the compiler and the happens-before algorithm implemented by the run-time module to detect data races. We will touch upon how the alternative to such a dynamic data race detector — a static data analyzer — differs in design, and the pros and cons of each approach.

Kavya Joshi

Kavya Joshi

Kavya Joshi is a software engineer at a start-up in San Francisco. She helps build their core software and scale their systems. In her free time, she runs a paper reading group ( and climbs rocks too. Before moving to San Francisco to be an Adult, Kavya was at MIT where she got a Bachelor's and Master's in Computer Science.