Skip to main content

Concurrent Programming:  2008-2009



Schedule S1(3rd years)Computer Science

Schedule B1Computer Science

Schedule B1(M&CS)Mathematics and Computer Science

Schedule AMSc in Advanced Computer Science

MSc by Research



Many challenges arise during the design and implementation of concurrent and distributed programs. The aim of this course is to understand those challenges, and to see techniques for tackling them. The main paradigm to be considered is message passing concurrency, where independent processes, with private variables, interact by passing messages.

Learning outcomes

At the end of the course students are expected to understand:
  • The conceptual foundations of concurrent programming, and
  • A variety of effective ways of structuring concurrent and distributed programs.


Students should have an understanding of CSP, e.g. as taught in the Concurrency course. Students should also have a good understanding of Object Oriented Programming, e.g. as taught in the Michaelmas Term OOP course. Students who have learnt either CSP or OOP elsewhere should discuss their experience with the lecturer before taking this course.

The course will have a number of practicals, to allow students to gain experience with concurrent programming. These practicals will use Scala; background reading on the language will be suggested.


Numbers in square brackets give an indication of the number of lectures to be spent on each topic.
  • Introduction: reasons for concurrency; processes, threads; concurrent architectures; concurrent computing paradigms; safety and liveness; challengesof concurrent computing. [2] 
  • Message passing concurrency; deadlock; piplines; fine-grained concurrency. [4] 
  • Patterns of interaction: producers and consumers; clients and servers; recursive parallelism; iterative parallelism; interacting peers; heartbeat algorithms. [3] 
  • Low-level concurrency controls: monitors; semaphores. [3] 
  • Parallel computing: data parallel; bag of tasks; barrier synchronisation. [3]


Reasons for concurrency; processes, threads; concurrent architectures; safety and liveness. Message passing concurrency; deadlock. Clients and servers. Interacting peers: heartbeat algorithms; pipeline algorithms. Parallel computing: data parallel; bag of tasks; barrier synchronisation. Low-level concurrency controls: monitors; semaphores.

Reading list

  • Course textbook: Foundations of Multithreaded, Parallel, and Distributed Programming, Gregory R. Andrews, Addison-Wesley, 2000.
  • Essential background reading: Scala documentation.
  • Alternatives: Principle of Concurrent and Distributed Programming, M. Ben-Ari, Prentice Hall, 1990.

Related research



Students are formally asked for feedback at the end of the course. Students can also submit feedback at any point here. Feedback received here will go to the Head of Academic Administration, and will be dealt with confidentially when being passed on further. All feedback is welcome.