Principles of Concurrency

Course Description:

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

Course Modules:

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.

Recommended Background:

  • Undergraduate and graduate students pursuing degrees in computer science
  • Professionals looking for a technical refresh of the material

Other Courses in the Series:

Badge Awarded: 

Related Courses

Course Finder

Refine your search using the tool below.

Filter By: