Tutors and lab supervisors

For exercises, lab supervision and grading:

Content of the course

This course teaches the principles of concurrent programming through a textbook, lectures and exercises. In this run of the course, autumn 2016, the exam will test you only on these principles. The labs, completely separate from the exam, will teach you to apply these principles in real-world languages. Your grade depends only on your performance on the exam and the labs.

See the section below on The Programming Languages Used for the concrete details of the programming languages that we will use during the course.

Here you can download a document summarising the required content of the course and the programming languages we will use.

Course Representatives

Chalmers University of Technology

University of Gothenburg

Ping Pong

You can register here to the Ping Pong instance of the course. This platform is meant to be used to post questions and have discussions related to the course. Sharing solutions is forbidden.

Passing requirements and grading guidelines

We will asset your knowledge about the content of the course in the labs as well as the final exam. The course consists on 100 points from which the exam carries a maximum of 68 points and the labs a maximum of 32 points (a maximum of 8 points each lab).

Maximum of 32 points for the labs
Maximum 68 points the exam


The labs are assigned points depending on the amount of resubmissions you need to do before passing them.

Submission Lab 1 Lab 2 Lab 3 Lab 4
1 10 6 6 10
2 7 4 4 7
3 5 3 3 5

To avoid having lab returns for simple errors, and therefore loosing points, we strongly suggest you to attend the lab sessions.


The exam is graded for Chalmers students as follows.

Points Grade
24-38 3
39-53 4
54-68 5

The exam is graded for GU students as follows.

Points Grade
24-53 G
54-68 VG

Grade for the whole course (GU)

To pass the course with G, you need to fulfill these requirements:

To get VG, you need to fulfill the requirements above and get VG in the exam.

Grade for the whole course (Chalmers)

To pass the course, you need to fulfill these requirements:

Point exam + lab Course Grade
40-59 3
60-79 4
80-100 5

The Programming Languages Used

For the labs


Labs 1 and 2 are to be done in Java. You will get a lecture on how to write concurrent programs in Java before the first lab. The textbook offers very good support.


Labs 3 and 4 are to be done in Erlang, a functional language widely used in the industry to write programs with thousands of concurrent processes. You will get two lectures on Erlang during the third week of the course. But if you have never used a functional language before, do skim right away the first two chapters of the quick Erlang tutorial (also available in PDF format from the same page). Download Erlang OTP, install it on your computer, and work through the first 10 pages or so of the tutorial. You might also try the first few pages of learn you some Erlang.

For the lectures and the exam


Pseudo-code The textbook uses a pseudo-code notation (summarised here) to write the programs to be discussed. The notation concentrates on concurrency, stripping down all other issues. (The book then often shows how to implement the pseudo-code programs in C, Java and Ada). We use the same pseudo-code notation in the lectures and the exam; indeed, it is the only programming language you need to know for the exam.

Pseudo-code notation is flexible, so we can easily add new constructs, but it is not executable, and it is essential to run programs to understand them. We can of course design in pseudo-code, implement in C or Java, and then test the implemented program. But the gap between the languages means we may not be testing what we designed.


Fortunately, there is a runnable language close to pseudo-code, Promela. (Or you can think of the pseudo-code notation as a blackboard simplification of Promela). Like the pseudo-code, Promela too can model most concurrency constructs, including those of Java and Erlang. This tutorial introduces the needed Promela constructs as it goes along.

We use Promela as a teaching aid to quickly try out programs and test their properties. It runs on Spin, an interpreter for Promela. Spin can also check properties of programs. You will see shortly that this last is essential to understand concurrent programs.

Neither the labs nor the exam require knowledge of Promela. Even the lectures will mostly use the pseudo-code; only briefly will we use Promela to demonstrate the behaviour of the program being discussed. So Promela is not really needed in the lectures either. It is only needed if you choose to attend exercise sessions based on it.

For the optional exercises: Java, Erlang and Promela

The exercises are not to be submitted; they carry no weight for your grade, but are offered simply as learning aids. We give you example programs in Java, Erlang and Promela that you can read, run and modify to see what happens. You are usually left to do the exercises in your own time, but we will sometimes organise a supervised session.

Official Course PM

Here you can download the official course PM. You can also find the course plan in Studieportalen.


The lectures will be keyed to the textbook whenever possible. We will use slides from the book as well as slides of our own. These will not in general be available before the lecture, as the content of each lecture is decided dynamically depending on classroom discussions. Many of these discussions will use the blackboard.

It is therefore important that you bring a notebook and make your own notes, and that you understand that the slides are in no sense "lecture notes", or any kind of substitute for the textbook or even for the lectures. Slides are visual aids for the lecture, that is all. After the lecture, they may help you remember what was discussed.

Concurrent Programming 2016 - Chalmers University of Technology & Gothenburg University