1.
What is Concurrent Programming?
1.1.
Introduccion
1.2.
Concurrency as abstract parallelism
1.3.
Multitasking
1.4.
Multiple computers
1.5.
The challenge of concurrent programming
2.
The Concurrent Programming Abstraction
2.1.
The role of abstraction
2.2.
Concurrent execution as interleaving of atomic statements
2.3.
Justification of the abstraction
2.4.
Arbitrary interleaving
2.5.
Atomic statements
2.6.
Correctness
2.7.
Fairness
2.8.
Machine-code instructions
2.9.
Volatile and non-atomic variables
2.10.
Concurrency in Java
3.
The Critical Section Problem
3.1.
Introduccion
3.2.
The definition of the problem
3.3.
First attempt
3.4.
Proving correctness with state diagrams
3.5.
Correctness of the first attempt
3.6.
Second attempt
3.7.
Third attempt
3.8.
Fourth attempt
3.9.
Dekker's algorithm
4.
Semaphores
4.1.
Process state
4.2.
Definition of the semaphore type
4.3.
The critical section problem for two processes
4.4.
Semaphore invariants
4.5.
The critical section problem for N processes
4.6.
Order of execution problems
4.7.
The producer—consumer problem
4.8.
Definitions of semaphores
4.9.
The problem of the dining philosophers
4.10.
Barz’s simulation of general semaphores
4.11.
Udding’s starvation-free algorithm
4.12.
Semaphores in Java
5.
Monitors
5.1.
Declaring and using monitors
5.2.
Condition variables
5.3.
The producer-consumer problem
5.4.
The immediate resumption requirement
5.5.
The problem of the readers and writers
5.6.
Correctness of the readers and writers algorithm
5.7.
A monitor solution for the dining philosophers
5.8.
Protected objects
5.9.
Monitors in Java
6.
Channels
6.1.
Models for communications
6.2.
Channels
6.3.
Parallel matrix multiplication
6.4.
The dining philosophers with channels
6.5.
Rendezvous
6.6.
Remote procedure calls
7.
Transparencias
7.1.
Tema 1
7.2.
Tema 2
7.3.
Tema 3
7.4.
Tema 4
7.5.
Tema 5
7.6.
Tema 6
7.7.
Tema 7
7.8.
Tema 8
8.
Seminarios
8.1.
C++
8.2.
Clojure
8.3.
Python
Light (default)
Rust
Coal
Navy
Ayu
PCTR 2020
Slides