Concurrency from First Principles — Part 2

Locks, CAS, Cache Lines… and Why Java Chose AQS (While C++ Didn’t)