1. Concurrency Programming (2): Language Memory Models — Rules Programmers Can Rely On

    Moves from hardware memory models back to the language layer: why languages need their own concurrency semantics, and what Java, Go, and CPython guarantee to concurrent programs.

  2. Concurrency Programming (1): Start with the Hardware — From count++ to Atomicity, Visibility, and Ordering

    Starting from the von Neumann architecture and instruction execution, this article follows count++ down to the hardware-level problems of atomicity, visibility, and ordering.

  3. Concurrency Programming (7): volatile — Visibility and Ordering for ready and counter

    Uses the counter + ready example to explain the visibility and ordering guarantees of Java volatile, and why Go and Python do not have an equivalent volatile keyword.