This book offers a comprehensive survey of shared-memory synchronization, with an emphasis on “systems-level” issues. It includes sufficient coverage of architectural details to understand correctness and performance on modern multicore machines, and sufficient coverage of higher-level issues to understand how synchronization is embedded in modern programming languages. The primary intended audience for this book is “systems programmers”―the authors of operating systems, library packages, language run-time systems, concurrent data structures, and server and utility programs. Much of the discussion should also be of interest to application programmers who want to make good use of the synchronization mechanisms available to them, and to computer architects who want to understand the ramifications of their design decisions on systems-level code.
This book is short and to the point. Despite being quite dense, it's very approachable and is easy to follow. Code examples are written in a very clean and clear pseudocode that makes reading it a joy (god I wish all code in my dev experience was as clean). Despite being "academic" I can't call it being dry, it has enough of illustrations and explanations that makes it a pretty entertaining.
This is definitely one of the best books on the topic that I've read. Overall it was a pleasant surprise.