Code, 3D, Games, Linux and much more...
The Art of Multiprocessor Programming
Author: Maurice Herlihy & Nir Shavit
Multiprocessor is everywhere now. After a period of uncertainty and fear we are starting to grasp multiprocessor architectures. We have started to forget about threads and started to think about tasks / jobs to decompose algorithms. The book The Art of Multiprocessor Programming will help you to have a solid background to implement a powerful multithreading architecture in your application.
The book is written as a textbook and each chapter at the end includes exercises that practice the presented concepts. In spite of the fact that this book may seem too academic in some sections, it is written and structured precisely. Java language is used in all samples although there is an appendix at the end of the book which describes the basic techniques using C# and C++ (using POSIX Threads). This book is definitely not for copying code but it is to understand deep details. After reading you should be prepared to start implementing these techniques yourself although I would recommend to use a good middleware (like TBB). Both actions are complementary to this book.
The book is structured in three parts. The content of the first part is definitions of mutual exclusion, fairness, memory models, shared memory and it may be hard to read. The second part is dedicated to real implementation. Firstly, basic tools like spin locks, monitors and semaphores are studied and implemented. Next, high-level containers are implemented using different techniques (mutexes, lock-free algorithms, etc): linked lists, concurrent queues, concurrent stacks, concurrent hashes, skip lists and priority queues. The chapter 16 is quite interesting. It is dedicated to futures and scheduling. Implementations like the Cilk Scheduler are described and implemented. The last part of the book (although included in the practice section) is dedicated to further experimental techniques like Transactonal Memory. It is good to see a working implementation of it.
I strongly recommend this book for the core programmers of your team, for those who will be in direct contact with the multithreading architecture. Although I would prefer a version of the book in C and I found some bugs and errors (probably due to being the first revision) I have not found other better book.
Rating: 7 / 10