Skip to content

Shared Mutable State as Root Hazard

All concurrency hazards (races, deadlocks, visibility issues) stem from shared mutable state. Remove sharing or mutation, and concurrency becomes trivial. This is the "iron triangle" of concurrency: pick any two of concurrent access, mutation, and sharing - but not all three safely.

Tension Addressed

Safety vs. Liveness, Isolation vs. Performance

Recognizable As

Architectural decisions to use immutable data, single-threaded ownership, message passing, or explicit synchronization. If you see a lock, there's shared mutable state; if you see immutable objects passed between threads, the hazard has been designed away.

Canonical Sources

Goetz, "Java Concurrency in Practice" (2006); Clojure's "Values and Change" philosophy

Transfers To

Functional programming (immutability), database isolation levels, distributed consensus (replicated state)