Операции загрузки / сохранения в памяти считаются атомарными, если они выполняются на фрагментах памяти, которые размещены на выровненном адресе памяти и не больше, чем собственный указатель размера машины.
Значение, при 64-битной операции загрузки / сохраненияпо согласованному адресу памяти будет атомарным на 64-битной платформе, но не будет атомарным на 32-битной платформе.
Современные процессоры предлагают специальный набор инструкций (в .Net большинство из них доступны через класс Interlocked
).которые позволяют достигать атомарности в операциях загрузки / хранения, которые больше, чем собственный размер указателя машины (64-битные операции на 32-битных процессорах и 128-битные операции на 64-битных процессорах. Последний не предоставляется классом Interlocked
, но доступен внативный код).
Для получения более подробной информации, проверьте сообщение Джо Даффи: Потоковая безопасность, разрыв чтения и тому подобное .