This lecture concludes the set on concurrency with three distinctive challenges for concurrent programming and some possible solutions: lock networks, deadlock, and hand-over-hand locking; priority inversion in thread scheduling; and relaxed memory models for modern processor architectures.
There was also some discussion of differences between the mailbox communication style in Erlang and channel-based communication in the Go language; a couple of applications of Erlang; and the
LongAdder class of Java 8.
Find out the meaning of the following words, in the context of CPU architecture and execution.
- Pipeline hazard
- Out-of-order execution
- Speculative execution
- Branch prediction
These are particularly relevant to the concurrency challenges presented by modern processor architectures and memory models, such as those described in the later portion of the lecture.
What Really Happened on Mars? Collection by Mike Jones of accounts of the priority inversion problem on software in the Mars Pathfinder lander. He’s also at Microsoft, working on digital identity and authentication.
Authoritative Account. What really, really happened on Mars. Technical details and full explanation by Glenn Reeves, leader of the Mars Pathfinder software team at NASA JPL.
Mars Pathfinder. NASA overview of the mission, the Pathfinder lander and Sojourner robot rover.
Those references I think fairly readable and entertaining. The next few, by contrast, are interesting but quite hard work and only there for when you really are keen to know just what’s going on with concurrent memory models. If you have a preferred tutorial or explanation on this, please let me know and I’ll add a link.
Relaxed-Memory Concurrency. Extensive list from Peter Sewell of work on models for the actual concurrency behaviour of x86, Power and ARM chips, and in particular the relation to C/C++ standardisation.