The critical section is our One True Tool for guaranteeing mutual exclusion on mutable shared variables. …
[But critical sections] must be applied consistently, and with the intended meanings. A program must ensure that every use of a mutable shared object is properly protected using exactly one of these mechanisms at any given point in its lifetime. Chaos can erupt if code tries to avoid or invert these meanings (e.g., trying to abuse taking a lock or reading an atomic variable as a "critical section exit" operation; see Example 3), or tries to use inconsistent synchronization techniques at the same time.
- September 2007: Use Critical Sections (Preferably Locks) to Eliminate Races
- August 2007: How Much Scalability Do You Have or Need?
- July 2007: The Pillars of Concurrency