Illustrating the effect of concurrency on programs written in familiar languages, this text focuses on novel language abstractions that truly bring concurrency into the language and aid analysis and compilation tools in generating efficient, correct programs. It also explains the complexity involved in taking advantage of concurrency with regard to program correctness and performance. The book describes the historical development of current programming languages and the common threads that exist among them. It also contains several chapters on design patterns for parallel programming and includes quick reference guides to OpenMP, Erlang, and Cilk. Ancillary materials are available on the book's website.

chapter 1|16 pages


chapter 2|26 pages

Concepts in Concurrency

chapter 3|22 pages

Concurrency Control

chapter 4|20 pages

The State of the Art

chapter 5|24 pages

High-Level Language Constructs

chapter 9|10 pages

Introduction to Parallel Algorithms

chapter 10|26 pages

Pattern: Task Parallelism

chapter 11|14 pages

Pattern: Data Parallelism

chapter 12|16 pages

Pattern: Recursive Algorithms

chapter 13|16 pages

Pattern: Pipelined Algorithms