“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
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
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)
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