Что касается отредактированной версии, это , а не , гарантированно поточно-ориентированный.
Рассмотрим 32-битную платформу. Это означает, что 64-битные длинные значения должны быть доступны в двух отдельных операциях.
Вполне возможно, что один поток прочитает первую половину числа, затем поменяется местами с ЦП, а вторая половина значения изменится за его спиной. Теперь этот поток имеет совершенно недопустимое значение.
Документы для Interlocked.Read прямо указывают, что:
Метод Read и 64-разрядные перегрузки методов Increment, Decrement и Add действительно атомарны только в системах, где System.IntPtr имеет длину 64 бита. В других системах эти методы являются атомарными по отношению друг к другу, но не по отношению к другим средствам доступа к данным. Таким образом, для обеспечения безопасности потоков в 32-разрядных системах любой доступ к 64-разрядному значению должен осуществляться через члены класса Interlocked.
(акцент мой)
РЕДАКТИРОВАТЬ: Теперь, когда это было отредактировано назад, это выглядит немного глупо, но я оставлю это здесь, чтобы подчеркнуть, что если вы блокируете в некоторых местах, но не в других, это вроде бессмысленно.