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