Figure 1: Three different viewpoints of how Example 1 executes in .NET when R is declared volatile. The mutual view shows what the sender and receiver have promised each other. Two of the "diodes" form a fence (green) that separates writing of M from reading of M.