На 32-разрядных компьютерах чтение и запись 64-разрядных значений в .net раньше были неатомарными, т.е. при чтении я мог прочитать значение, которое никогда не записывалось в память, состоящее из одной более старой 32-разрядной половины, и одна новая половина.
Исходя из этого ответа, если вы работаете в 64-битной системе и используете 64-битную CLR, то они являются атомарными. Ответ ссылается на эту запись в блоге Эрика Липперта: https://blogs.msdn.microsoft.com/ericlippert/2011/05/31/atomicity-volatility-and-immutability-are-different-part-two/
Спецификация CLI фактически дает более сильные гарантии. CLI гарантирует, что чтение и запись переменных типов значений, которые имеют размер (или меньше) естественного размера указателя процессора, являются атомарными; если вы выполняете код С# в 64-битной операционной системе в 64-битной версии CLR, тогда чтение и запись 64-битных двойных и длинных целых также гарантированно будут атомарными. Язык С# не гарантирует этого, но спецификация времени выполнения дает. (Если вы выполняете код С# в какой-либо среде, которая не реализована какой-либо реализацией CLI, то, конечно, вы не можете полагаться на эту гарантию; обратитесь к поставщику, который продал вам среду выполнения, если вы хотите знать, какие гарантии они предоставляют.)
running C# code [..] in a 64 bit version of the CLR
исключит 32-битные сборки, работающие внутри 64-битной CLR (через WOW64).