Documentation

Mt

Mt: Reasoning about multithreaded algorithms #

This framework allows reasoning about multithreaded algorithms. Both blocking and non blocking algorithms are supported.

We provide types to describe systems as a list of threads and to describe threads using monadic code. The monad Mt.TaskM allows side effects like modifying shared memory.

Our goal is to reason about multithreaded systems by decoupling the threads from each other. We reformulate the problem in a way such that it is to possible to reason about one thread at a time, almost as in the single threaded case.

Basic idea: To decouple threads from each other, we have to specify some rules. We have to prove that all threads follow those rules, but we can do this one thread at a time, line by line. After each atomic step, the other threads may become active and change the shared memory. But they follow the same rules, and we do not need to know anything else about them. We have to assume that any of the allowed modifications has happened, but if we still succeed in proving our goal, our thread behaves correctly completly independent of the implementation of the other threads.

High level overview #