In my day, synchronization was just one topic out of many in the undergraduate operating systems course, alongside process scheduling and virtual memory. Nowadays, however, with multicore processors appearing in $500 personal computers, this topic has become more important. The first author teaches a whole undergraduate course on it at Brown University using this book as a textbook, and the second author does so at Tel Aviv University. It has a long discussion of locks (spinlocks, reader-writer queue-based locks, and combinations thereof), lock-free processor instructions (the IBM/360 had one theoretically less powerful than the Intel x86 and newer processors), data structures based on lock-free processor instructions (lists, stacks, queues, hash tables, skip lists). and software transactional memory, which is supposed to be the future of multiprocessor programming.