1. Course Syllabus and Grading Schema

The list of topics below is a subject of possible minor changes.

1.1. Lectures

  • Introduction: basic problems in concurrency, safety, liveness.

  • Functional and Imperative Programming in Scala

  • Mutual Exclusion

  • Concurrent Objects

  • Reasoning about Consensus in Shared Memory

  • Read-Modify-Write Operations

  • Spin Locks

  • Monitors and Semaphores

  • Read-Write Locks

  • Linked Lists

  • Concurrent Queues; Stacks and Elimination

  • Data Race Detection in Practice

  • Futures in Java

  • Futures and Asynchronous Computations in Scala

  • Using and Implementing Data-Parallel Collections

  • Actor-Based Concurrency and Actor Supervision

  • Distributed Consensus; Paxos

  • Byzantine Fault-Tolerance, Blockchain Consensus and Smart Contracts

1.2. Grading Schema

  • Homework Tasks: 65% (10 assignments)

  • Midterm Project: 15%

  • Final Project: 15%

  • Active Participation: 5%

1.3. Assignments

  • Theory Assignment 1 (Intro)

  • Programming Assignment 1 (Scala Basics)

  • Theory Assignment 2 (Mutual Exclusion)

  • Programming Assignment 2 (Mutual Exclusion)

  • Theory Assignment 3 (Concurrent Objects)

  • [Non-Mandatory] Programming Assignment 3 (Blocking Synchronisation)

  • Mid-Term Project: Concurrent Resource Management

  • Programming Assignment 4 (Concurrent Lists)

  • Research Mini-Project (Detecting Data Races in Java Projects)

  • Programming Assignment 5 (Futures and Promises)

  • Programming Assignment 6 (Parallel Collections)

  • Programming Assignment 7 (Actors)

  • Final Project: Replication and Fault-Tolerance