Атомарный размер чтения / записи на 64-битных системах for.NET?

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

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

1 ответов


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

проверить как гарантировать 64-разрядной пишет атомной? для обсуждения на нем.