Three fix shapes account for the concurrency primitives Stage 1 introduces. Other shapes — lock-free CAS loops, transactional memory, single-threaded event loops — live in later stages and are not reducible to these three.
Serialize. Make the compound operation indivisible. Mutex holds a lock for the duration of the section. Atomic RMW collapses three instructions into one indivisible one. The cost is contention.
Immutable. Do not share mutable state. Pass copies, return new values instead of mutating. Functional-style concurrency. The cost is memory allocation and bookkeeping.
Own, don't share. Ownership transfer. Only one thread at a time has the right to mutate; transfer is explicit. Rust's Send model, Go's share by communicating, the actor model. The cost is a different mental model.
GIL is serialize at runtime scope (one giant mutex on all interpreter state). Mutex is serialize at section scope. Borrow checker is own, don't share enforced at compile time. The three Stage 1 primitives are three points in this design space.