Вам нужно более четко различать «атомарный» и «потокобезопасный». Как вы говорите, записи являются атомарными для большинства встроенных типов значений и ссылок.
Однако это не значит, что они поточно-ориентированы. Это просто означает, что если записаны значения «A» и «B», поток никогда не увидит что-то промежуточное. (например, изменение от 1 до 4 никогда не будет показывать 5, 2 или любое другое значение, кроме 1 или 4.) Это не означает, что один поток увидит значение «B», как только был записан в переменную. Для этого вам нужно взглянуть на модель памяти с точки зрения волатильности. Без барьеров памяти, обычно получаемых с помощью блокировки и / или изменчивых переменных, запись в основную память может быть отложена, а чтение может быть расширено, при условии, что значение не изменилось с момента последнего чтения.
Если у вас был счетчик, и вы запросили его последнее значение, но никогда не получил последнее значение из-за отсутствия барьеров памяти, я не думаю, что вы могли бы разумно назвать этот потокобезопасным даже хотя каждая операция вполне может быть атомарной.
Однако это не имеет ничего общего со свойствами - свойства - это просто методы с синтаксическим сахаром вокруг них. Они не дают никаких дополнительных гарантий в отношении нарезания резьбы. Модель памяти .NET 2.0 имеет больше гарантий, чем модель ECMA, и, возможно, она дает гарантии относительно входа и выхода метода. Эти гарантии должны распространяться и на свойства, хотя я бы нервничал из-за интерпретации таких правил: иногда бывает очень сложно рассуждать о моделях памяти.