skip to content

Department of Computer Science and Technology



These pages are currently being updated for 2020/2021

Principal lecturer: 
Prof Peter Sewell
Dr Timothy Harris
MPhil ACS, Part III
Course code: 
Some familiarity with discrete mathematics (sets, partial orders, etc.) and with sequential Java programming will be assumed. Experience with operational semantics and with some concurrent programming would be helpful.
Class limit: 


In recent years multiprocessors have become ubiquitous, but building reliable concurrent systems with good performance remains very challenging. The aim of this module is to introduce some of the theory and the practice of concurrent programming, from hardware memory models and the design of high-level programming languages to the correctness and performance properties of concurrent algorithms.


Part 1: Introduction and relaxed-memory concurrency [Professor P. Sewell]

  • Introduction. Sequential consistency, atomicity, basic concurrent problems. [1 block]
  • Concurrency on real multiprocessors: the relaxed memory model(s) for x86, ARM, and IBM Power, and theoretical tools for reasoning about x86-TSO programs. [2 blocks]
  • High-level languages. An introduction to C/C++11 and Java shared-memory concurrency. [1 block]

Part 2: Concurrent algorithms [Dr T. Harris]

  • Concurrent programming. Simple algorithms (readers/writers, stacks, queues) and correctness criteria (linearisability and progress properties). Advanced synchronisation patterns (e.g. some of the following: optimistic and lazy list algorithms, hash tables, double-checked locking, RCU, hazard pointers), with discussion of performance and on the interaction between algorithm design and the underlying relaxed memory models. [3 blocks]
  • Research topics, likely to include one hour on transactional memory and one guest lecture. [1 block]


By the end of the course students should:

  • have a good understanding of the semantics of concurrent programs, both at the multprocessor level and the C/Java programming language level;
  • have a good understanding of some key concurrent algorithms, with practical experience.

Recommended reading

Herlihy, M. and Shavit, N. (2008). The art of multiprocessor programming. Morgan Kaufmann.


Coursework will consist of assessed exercises.

Practical work

Part 2 of the course will include a practical exercise sheet.  The practical exercises involve building concurrent data structures and measuring their performance.  The work can be completed in C, Java, or similar languages.


  • Assignment 1, for 50% of the overall grade. Written coursework comprising a series of questions on the design of mutual exclusion locks and shared-memory data structures.
  • Assignment 2, for 50% of the overall grade. Written coursework comprising a series of questions on hardware and software relaxed-memory concurrency semantics.

Further Information

Due to COVID-19, the method of teaching for this module will be adjusted to cater for physical distancing and students who are working remotely. We will confirm precisely how the module will be taught closer to the start of term.

Current Cambridge undergraduate students who are continuing onto Part III or the MPhil in Advanced Computer Science may only take this module if they did NOT take it as a Unit of Assessment in Part II.

This course shares lectures with the Part II Computer Science Tripos course Multicore Semantics and Programming. The assessment will be adjusted to an appropriate level for those enrolled on Part III of the Tripos or the M.Phil in Advanced Computer Science.