Race Condition

dead-metaphor CompetitionSoftware Programs

Categories: software-engineeringsystems-thinking

What It Brings

A footrace where the outcome depends entirely on who crosses the finish line first — mapped onto concurrent systems where the result depends on the relative timing of operations that were never meant to compete. The metaphor takes an accidental ordering dependency and makes it legible by framing it as a contest, even though the “contestants” (threads, processes, signals) do not know they are racing and the “prize” (a shared resource) is corrupted by the competition itself.

Key structural parallels:

Where It Breaks

Expressions

Origin Story

The term “race condition” predates software. It originates in electronics engineering, where it described the behavior of logic circuits whose output depended on the relative timing of input signals arriving through different paths. If two signals “raced” to reach a gate, the output was indeterminate. The term appears in electronics literature from the 1950s and 1960s.

The concept migrated to software with the advent of multiprogramming in the 1960s. Edsger Dijkstra’s 1965 paper “Solution of a Problem in Concurrent Programming Control” addressed what we now call race conditions, though he did not use that exact term. The term became standard in operating systems textbooks through the 1970s and 1980s, appearing in Andrew Tanenbaum’s Operating Systems: Design and Implementation (1987) and subsequent editions.

Today, “race condition” is so deeply embedded in computing vocabulary that it is used without metaphorical awareness. The MITRE CWE (Common Weakness Enumeration) catalogs race conditions as CWE-362, treating the term as purely technical rather than metaphorical.

References

Related Mappings