Developer's Reading List, April 17, 2012 C++ concurrency, web crawlers, Google testing, and more: This month's reading list is packed with great books on interesting topics.
by Anthony Williams
This book is a deep dive into concurrency using C++11 features. It's written by the primary developer and maintainer of the Boost Thread library, which is the basis for much of the language's new threading support. In sum, it's written by an expert.
It starts off with the basics, assuming the reader has good (even very good) command of the language, but is new to writing parallel code. It steps through the problems posed by concurrency, the solutions and limitations of mutual exclusion, and how they're implemented in C++11. It then moves through the C++ memory model and atomic types. Finally, it digs into the design of lock-based and lock-free data structures. It's the best treatment I've seen of these topics since Herb Sutter discussed them in our pages.
The book thoughtfully covers topics of real importance that are frequently overlooked in other treatments, namely designing code for multithreading and debugging threaded applications. Of these, both treatments are too short in my view. A large part of the book is reference material (almost 130 pages on the C++ threading library alone). And another appendix is full message-framework all laid out in code with explanations throughout. There's no doubt the author has done his homework.
I have a few small complaints, but they are truly small. The first is that you must have in-depth knowledge of C++, good-enough-to-skate-by won't be enough for this book. Second, the author consigns thread pools to the final chapters under the rubric of "Advanced Threading." In my opinion, pools mark the point at which concurrency gets really interesting; but here, it's where the author stops. Predictably, given this orientation, he does not ever address the actor model, which gets a single passing mention in the index. It's as if this approach did not exist at all, even though it's integral to several languages — just not, in Williams' view, in C++.
Overall, these complaints reflect my preferences, rather than flaws that invalidate the book. Williams' work is an excellent treatment and likely to be the defining title in this area for a long time to come. Highly recommended.
If you want a closer look at content from this book, we ran an excerpt from it last month in a popular article: "Waiting for One-Off Events with Futures."
— Andrew Binstock