operaciones de carga/almacenamiento de memoria se consideran atómica si se realizan en trozos de memoria que se colocan en una dirección de memoria alineada y no son más grandes que el puntero nativo del tamaño de la máquina.
Lo que significa que a una operación de carga/almacenamiento de 64 bits en una dirección de memoria alineada será atómica en una plataforma de 64 bits, pero no será atómica en una plataforma de 32 bits.
Los procesadores modernos ofrecen un conjunto especial de instrucciones (en .Net, la mayoría de ellas están expuestas a través de la clase Interlocked
). que permiten alcanzar la atomicidad en operaciones de carga/almacenamiento que son más grandes que el tamaño del puntero nativo de la máquina (operaciones de 64 bits en procesadores de 32 bits y operaciones de 128 bits en procesadores de 64 bits).Este último no está expuesto por la clase Interlocked
, pero está disponible en código nativo).
Para obtener más información, consulte la publicación de Joe Duffy: Thread-safety, torn reads, and the like.
Vea también http://stackoverflow.com/questions/596065/under-c-is-int64-use-on-a-32-bit-processor-dangerous –