Размер атомарного чтения / записи в 64-битных системах для .NET?

Спецификация C # говорит, что чтение и запись являются атомарными для 32-битных типов и меньше (а также для ссылок). Итак, если у меня есть поле Int32 в моем классе, я знаю, что несколько потоков могут читать и писать в него, и они будут атомарными в работе, поэтому значение всегда будет согласованным (хотя проблемы с кешированием являются потенциальной проблемой, но не в этом суть этого вопроса).

То же самое и в 64-битных системах? Если я скомпилирую приложение для 64-битной версии, означает ли это, что Int64 по-прежнему считается не атомарным? Или теперь я могу считать Int64 атомарным при чтении / записи, потому что он скомпилирован и работает в 64-битной системе?


person Phil Wright    schedule 19.10.2011    source источник
comment
Если сомневаетесь, конечно Interlocked - но это очень хороший вопрос.   -  person Marc Gravell    schedule 20.10.2011


Ответы (1)


Он должен быть одинаковым (не атомарным) - значения должны быть правильно выровнены, чтобы 64-битные значения могли иметь атомарное чтение / запись, но, насколько мне известно, CLR не требует всегда выравнивать значения Int64 таким образом.

Ознакомьтесь с Как гарантировать, что 64-битные записи являются атомарными? для некоторого обсуждения по этому поводу.

person Alexei Levenkov    schedule 19.10.2011