Debe distinguir entre "atomic" y "thread-safe" más de cerca. Como dices, las escrituras son atómicas para la mayoría de los tipos y referencias de valores incorporados.
Sin embargo, eso no significa que sean seguros para subprocesos. Simplemente significa que si los valores "A" y "B" están escritos, un hilo nunca verá algo intermedio. (Por ejemplo, un cambio de 1 a 4 nunca mostrará 5, o 2, o ningún valor distinto de 1 o 4.) Es no significa que un hilo verá el valor "B" tan pronto como se haya escrito en la variable. Para eso, necesita mirar el modelo de memoria en términos de volatilidad. Sin barreras de memoria, generalmente obtenidas a través de variables de bloqueo y/o volátiles, las escrituras en la memoria principal pueden retrasarse y las lecturas pueden avanzar, suponiendo efectivamente que el valor no ha cambiado desde la última lectura.
Si tenía un contador y le pidió su último valor, pero nunca recibió el último valor debido a la falta de barreras de memoria, no creo que pueda razonablemente llamarlo seguro para subprocesos aunque cada operación bien puede ser atómico.
Esto no tiene nada que ver con las propiedades, sin embargo, las propiedades son simplemente métodos con azúcar sintáctico a su alrededor. No hacen garantías adicionales al enhebrar. El modelo de memoria .NET 2.0 tiene tienen más garantías que el modelo ECMA, y es posible que ofrezca garantías en cuanto a la entrada y salida del método. Esas garantías deberían aplicarse también a las propiedades, aunque me pondría nervioso la interpretación de tales reglas: a veces puede ser muy difícil razonar sobre los modelos de memoria.
he tenido la intención de hacer esta misma por un tiempo ... Sólo estoy adivinando, por lo que se lo ponga en una respuesta , pero no me sorprendería si las propiedades automáticas son atómicas. Cualquier otra cosa probablemente no es así. –