A modern chip has many cores, and a modern program runs many things at once — downloading, drawing, and computing all in the same instant. Concurrency is the art of getting many strands of execution to cooperate without tripping over one another. It is also where some of the nastiest bugs in all of computing live: race conditions and deadlocks that appear once in a million runs and vanish the moment you look.
This branch covers threads and processes, the race conditions that shared data invites, and the tools that tame them — locks, semaphores, monitors — plus deadlock and the models we use to program many cores at once.