Concurrent and Distributed Programming

Teacher: Camilo Rueda.

Credits: 3

Requirements: Basic knowledge of programming languages, algorithms, data structures and logic.

Time: Saturday, 9:00-12:00 AM


This course exposes students to the great challenge industry is facing: 
how to take advantage of the increasingly concurrent nature of computation. 
Multi-core machines are here and they will probably be used in most computing contexts. 
the construction of concurrent software has to be dealt with properly. 
This course explores ways in which this can be achieved


  • To provide a solid and practical knowledge about the challenge of constructing concurrent applications.
  • To get familiar with different types of concurrency.
  • To explore different concurrency strategies and assertain their merits
  • To practice on concurrent software construction using Oz
  • To reason about the correctness of concurrent programs
  • To explore models for implementing distributed applications.

The strategy of the course is to present each concurrency concept together with their associated models and techniques. Models are formalized as extensions of the Oz kernel language. Concrete applications are constructed using this extension.


  • Declarative Computation Model
    1. Thinking “functionally”
    2. Procedural abstraction and recursion
    3. Lazy evaluation and higher order programming
    4. Languages: ML, Haskell
    5. Applications
  • Declarative Concurrency: data-driven concurrency
    1. Multithreaded programming
    2. Streams
    3. Synchronizing by single-assignment variables
    4. Process synchronization
    5. Applications
  • Message Passing Concurrency
    1. Asynchronous concurrency
    2. The notion of “port”
    3. Concurrent agents
    4. Languages: Erlang
    5. Applications
  • Share State Concurrency
    1. Programming with locks
    2. Implementing locks
    3. High level abstractions: monitors and transactions
    4. Lenguages: concurrent Java, Scoop
    5. Applications
  • Reasoning about concurrency
    1. Model checking: Spin
    2. Process calculus: CSP
  • Distributed Programming
    1. Distribution of data
    2. Distribution of state
    3. Distributed programming with patterns
    4. Distributed protocols
    5. Fault tolerance
    6. Applications


  • First project : 30% * Second project : 30%
  • Quizzes : 20%
  • Homeworks : 20%


  1. Peter Van Roy and Seif Haridi. Concepts, Techniques, and Models of Computer Programming
  2. J. Armstrong, R. Virding, C. Wikström, M. Williams. Concurrent Programming in Erlang. Prentice-Hall
  3. S. Marlow Parallel and Concurrent Programming in Haskell. O'Reilly
  4. G.J. Holzmann The SPIN Model Checker: Primer and Reference Manual
  5. A. Roscoe. Theory and Practice of Concurrency. Prentice-Hall
  6. Andrew S. Tanenbaum and Maarten van Steen. Distributed Systems: Principles and Paradigms

Readings on Concurrency

  1. Herb Sutter. The Free Lunch Is Over: A Fundamental Turn Toward Concurrency in Software
  2. R. Vermeersch. Concurrency in Erlang & Scala: The Actor Model
  3. Abelson and Sussman. amorphous Computing AbSus-paper
  4. Miller, Tribble, Shapiro. E language MiTSha-paper
  5. Edwards Coherent Reaction EdW-paper


materias/cmcd.txt · Última modificación: 2015/01/28 17:17 por crueda
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki