Good Resources for Learning to Program with Concurrency

With the increase in multicore processors there has been an increase in demand for concurrent programming and an increase in books and resources that focus on programming with concurrency. Below I will outline some of the books on my own bookshelf that have been useful.
 Understand Concurrency – An Introduction

If you are new to concurrency and are looking for an introduction that covers different concurrency paradigms and highlights programming concurrently in different languages, then there are several good books available:

  • Introduction to Concurrency in Programming Languages
  • Principles of Parallel Programming
  • Principles of Concurrent and Distributed Programming (also provides details on programming distributed systems)

Programming Concurrency in C

My personal favourite introductory book for programming with concurrency in C is “The Art of Concurrency: A Thread Monkey’s Guide to Writing Parallel Applications.” Several of the reasons I like this book is that it focuses on the parallelization of sequential algorithms, it includes a set of rules for the design of multithreaded applications and it even discusses how to analyze concurrent code (both for correctness and performance).

Programming Concurrency in C#

Joe Duffy’s book “Concurrent Programming on Windows” introduces the reader to programming with concurrency using the .NET Concurrency APIs. The book contains plenty of C# examples and is a good book if you mainly want to write concurrent code for Windows using .NET. I have browsed this book but I have not worked with a lot of the examples since I develop mainly in Linux.

Programming Concurrency in Java

Doug Lea’s “Concurrent Programming in Java: Design Principles and Patterns” is a classic text for anybody interested in learning about concurrent programming in Java. An updated text that works as a nice companion to this book is “Java Concurrency in Practice” by Brian Goetz. I would recommend both of these texts as being interesting to read and useful resources when programming. Another newer text with similar content is “Programming Concurrency on the JVM.”

        

Understanding Concurrency – Advanced Topics

If you are interested in programming concurrently with multicore CPUs you may also be interested in programming with many GPUs (Graphical Processing Units). The book “Programming Massively Parallel Processors: A Hands-on Approach” is a nice guide to general-purpose GPU programming with CUDA (similar to C). An importance difference between CPU and GPU programming is:

  • Multicore CPU programming involves many different instructions being executed simultaneously.
  • GPU programming involves a single instruction being applied simultaneously to multiple data elements (SIMD).

 

I would have included the book “Fundamentals of Multicore Software Development” in the introductory books above if it only contained the first two sections – (1) Basics of Parallel Programming and (2) Programming Languages for Multicore. However, this book also contains a section on heterogeneous computing (CPU + GPU) and a section on emerging technologies. I should mention that this book is a collection of chapters written by different authors.