<?xml version="1.0"?>
<clause number="12.5" title="Atomicity of variable references">
  <paragraph>Reads and writes of the following data types shall be atomic: <keyword>bool</keyword>, <keyword>char</keyword>, <keyword>byte</keyword>, <keyword>sbyte</keyword>, <keyword>short</keyword>, <keyword>ushort</keyword>, <keyword>uint</keyword>, <keyword>int</keyword>, <keyword>float</keyword>, and reference types. In addition, reads and writes of enum types with an underlying type in the previous list shall also be atomic. Reads and writes of other types, including <keyword>long</keyword>, <keyword>ulong</keyword>, <keyword>double</keyword>, and <keyword>decimal</keyword>, as well as user-defined types, need not be atomic. Aside from the library functions designed for that purpose, there is no guarantee of atomic read-modify-write, such as in the case of increment or decrement. <table_line/>
</paragraph>
</clause>
