¿Las lecturas y escrituras en campos no alineados en .NET son definitivamente atómicas?

La especificación de C # (ECMA-334 yISO / IEC 23270) tiene un párrafo sobre la atomicidad de las lecturas y escrituras:

12.5 Atomicidad de las referencias variables.

Las lecturas y escrituras de los siguientes tipos de datos serán atómicas: bool, char, byte, sbyte, short, ushort, uint, int, float y tipos de referencia. Además, las lecturas y escrituras de tipos de enumeración con un tipo subyacente en la lista anterior también serán atómicas. Las lecturas y escrituras de otros tipos, incluidos los tipos long, ulong, double y decimal, así como los definidos por el usuario, no necesitan ser atómicos.

Pero me cuesta imaginar que eso sea siempre cierto. Por ejemplo, puedo diseñar una estructura usando elStructLayout atributo, y obliga a los campos a no estar alineados:

// sizeof(MyStruct) == 9
[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct MyStruct
{
    public byte pad;   // Offset: 0
    public int value1; // Offset: 1
    public int value2; // Offset: 5
}

Ahora, cuando hago esto, creo que la escritura a laint esno atómico, ya que no está alineado con el límite natural:

MyStruct myStruct = new MyStruct();
myStruct.value1 = 20;

Entonces, ¿es definitivamente atómico (como dice la especificación), o no se garantiza que sea atómico (por ejemplo, en x86)? De cualquier manera, ¿tienes alguna fuente para respaldar esto?

Respuestas a la pregunta(1)

Su respuesta a la pregunta