A Selected Bibliography of Concurrency
“By a partial, prejudiced, & ignorant Historian” (Austen)

In the course of other researches, I realized that I had forgotten (or in some cases never known) the works that are the basis of the presently dominant techniques for programming concurrent computations in a shared-memory computer: threads, events, mutexes, monitors, condition variables, and (coming soon, perhaps) transactional memory. I unearthed the works that I personally believe have been most influential, acquired copies of each of them, and (re-)read them. Subsequently, some of my colleagues found my collection educational, so I have chosen to present it here for all to see.

My primary selection criterion was that I found the work helpful in understanding how and why the state of our art has reached its current point. I ignored some potentially relevant but separable areas, notably Byzantine algorithms. The collection is biased towards works aimed at practitioners: the people who build systems that will be used by others. There are very few theorems in this collection.

This is my own collection—if you want a different collection, you can create one yourself. But if you would like to suggest additions or corrections I would nevertheless be happy to hear from you.

For each paper, I provide the citation and a link to an online source for the paper. All of the papers are available for download. Most of them are on an author’s web site; for the others you will need to have access to the ACM Digital Library.

Andrew Birrell, December 2006


1965
Edsgar Dijkstra
Solution of a Problem in Concurrent Programming Control
Undated
Edsgar Dijkstra
EWD 51: Multiprogrammering en de X8
1968
Edsgar Dijkstra
EWD 123: Cooperating Sequential Processes
1968
Edsgar Dijkstra
The Structure of the “THE”-Multiprogramming System
1973
Per Brinch Hansen
Shared Classes
In Operating System Principles, Prentice Hall, Pages 226-232
Also available in the author’s web site
1974
Tony Hoare
Monitors: An Operating System Structuring Concept
1975
Per Brinch Hansen
The Programming Language Concurrent Pascal
In IEEE transactions on Software Engineering, Volume 1, Number 2, Pages 199-207
Also available in the author’s web site
1978
Tony Hoare
Communicating Sequential Processes
1978
Hugh Lauer & Roger Needham
On the Duality of Operating System Structures
In 2nd International Symposium on Operating Systems, IRIA
Reprinted in Operating Systems Review, Volume 13, Number 2, Pages 3-19
1980
Butler Lampson & Dave Redell
Experience with Processes and monitors in Mesa
1983
Greg Andrews & Fred Schneider
Concepts and Notations for Concurrent Programming
1993
Maurice Herlihy & Eliot Moss
Transactional Memory: Architectural Support for Lock-Free Data Structures
1995
Nir Shavit & Dan Touitou
Software Transactional Memory
1996
John Ousterhout
Why Threads Are A Bad Idea (for most purposes)
Presentation at 1996 Usenix Annual Technical Conference
Available in the author’s web site
1999
Per Brinch Hansen
Java’s Insecure Parallelism
2001
Per Brinch Hansen
The Invention of Concurrent Programming
In The Origin of Concurrent Programming, Springer-Verlag, Pages 1-59
Also available in the author’s web site
2001
Matt Welsh, David Culler, and Eric Brewer
SEDA: An Architecture for Well-Conditioned, Scalable Internet Services
2002
Atul Adya, et al
Cooperative Task Management without Manual Stack Management
2003
Rob von Behren, Jeremy Condit and Eric Brewer
Why Events Are A Bad Idea (for high-concurrency servers)
2005
Tim Harris, et al
Composable Memory Transactions