Writing concurrent programs is notoriously difficult, and is of increasing practical importance. In this series of lectures I will introduce “transactional memory” (TM) as a technique for building shared memory data structures. As I will illustrate, it can be much easier to build shared memory data structures using TM than it is to use conventional abstractions such as locks, or the atomic compare-and-swap instruction.

In this lecture I will talk about how TM can be integrated into programming languages such as C# or Java, and how an optimizing compiler can drastically improve the performance of a program using TM, and how runtime system components such as the garbage collector can be modified to accommodate programs using TM.