The Principles of Concurrency course will examine the design and implementation of concurrency abstractions found in modern programming languages and computing systems. In this course, concurrency is viewed primarily as a program structuring device.
Students will Learn:
- Techniques to describe concurrency such as threads, processes, events, and coroutines, as well as mechanisms that enforce a specific interaction and coordination model among concurrently executing tasks
- Concepts and mechanisms for describing and reasoning about correctness such as data races, linearizability, deadlocks, livelocks, transactions and serializability
- Concepts in languages like Erlang or Concurrent ML and libraries like Posix and differences between synchronous, (asynchronous) and (un)buffered communication
- About wait- and lock-free data structures
Module 1 – Introduction to Concurrency, Threads, Processes, and Coroutines
- Learning Objective: Define and list the principles of concurrency, explain the threads/processes and identify how each are used, and assess the various aspects of coroutines.
Module 2 – Continuations, Models & Paradigms, and Sequential Consistency
- Learning Objective: Express different kinds of state saving and complex control using continuations, explain how to use models and paradigms to build threads, and assess sequential consistency & program structure and how they are used.
Module 3 – Locks/Mutual Exclusion and Pthreads
- Learning Objective: Analyze simple locks, Peterson’s algorithm, Bakery algorithm, and thin/fat/software locks, and explain creating, joining, and detaching threads, and passing arguments.
Module 4 – Data Races, Linearizability, Software Transactions, and Sequential Processes
- Learning Objective: Discuss safety when working in shared memory concurrent programming, and recognize how to constrain and rationalize how we think about concurrent programs using linearizability.
Module 5 – Erlang, Cilk, and Deterministic Parallelism
- Learning Objective: Study the language, Erlang, the language library known as Cilk, and identify whether we gain any benefits from using multi-core systems by taking sequential programs and making sure they run on the multi-core systems.
- Undergraduate and graduate students pursuing degrees in computer science
- Professionals looking for a technical refresh of the material