Strong Memory Model

This lesson gives a brief overview of the strong memory model regarding concurrency in C++.

We'll cover the following

Atomics are the base of the C++ memory model. By default, the strong version of the memory model is applied to the atomics; therefore, it makes a lot of sense to understand the features of the strong memory model. You can see from the subsection on Contract: The Challenges, with the strong memory model I refer to sequential consistency, and with the weak memory model I refer to relaxed semantic.

Strong Memory Model

Java 5.0 got its current memory model in 2004, and C++ got its model in 2011. Before that, Java had an erroneous memory model and C++ had no memory model. Those who think this is the endpoint of a long process are completely wrong. The foundations of multithreaded programming are 40 to 50 years old; Leslie Lamport defined the concept of sequential consistency in 1979.

Sequential consistency provides two guarantees:

  • The instructions of a program are executed in source code order.
  • There is a global order of all operations on all threads.

Before I dive deeper into these two guarantees, I want to explicitly emphasize that these statements only hold for atomics, but still influence non-atomics. This graphic shows two threads: each thread stores it’s variable x or y respectively, loads the other variable y or x, and stores them in the variable res1 or res2.

Get hands-on with 1200+ tech skills courses.