Overview
Computer networks, multiprocessors and parallel algorithms, though radically different, all
provide examples of processes acting in parallel to achieve some goal. All benefit from the
efficiency of concurrency yet requires careful design to ensure that they function correctly.
The concurrency course introduces the fundamental concepts of concurrency using the notation
of Communicating Sequential Processes. By introducing communication, parallelism, deadlock,
live-lock, etc., it shows how CSP represents, and can be used to reason about, concurrent
systems. Students are taught how to design interactive processes and how to modularise
them using synchronisation. One important feature of the module is its use of both
algebraic laws and semantic models to reason about reactive and concurrent designs. Another
is its use of FDR to animate designs and verify that they meet their specifications