De la lecture ou de l'écriture d'un double est atomique sur une architecture Intel si ils sont alignés sur une 8 octets de l'adresse de la frontière. Voir la mise à Jour Est double opération atomique.
Même si les lectures et écritures de doubles pourraient effectivement être atomique en .NET code sur une architecture Intel, je n'aurais pas confiance en elle que le C# spec n'est pas garantie, consultez cette citation d'une Réponse par Eric Lippert.
Lit et écrit des types de données suivants sont atomiques: bool, char,
octet, sbyte, short, ushort, uint, int, float, et les types référence. Dans
outre, les lectures et les écritures des types enum avec un type sous-jacent dans
la liste précédente sont également atomique. Lit et écrit les autres types,
y compris de long, ulong, double, decimal, ainsi que définis par l'utilisateur
les types ne sont pas garantis pour être atomique.
Utiliser Interlocked
pour la lecture et l'écriture pour être sûr. Il garantit l'atomicité. Sur une architecture où il est atomique par défaut, il ne devrait pas générer de frais généraux. Vous devez utiliser Interlocked
pour la lecture de l'écriture pour s'assurer qu'aucun partiellement écrite, les valeurs sont lues (citation d' InterLocked.Read()
de la documentation):
La méthode de Lecture et 64 bits des surcharges de l'Incrémentation, Décrémentation,
et d'Ajouter méthodes sont vraiment atomique uniquement sur les systèmes sur lesquels un Système.IntPtr
est 64 bits. Sur d'autres systèmes, ces méthodes sont atomiques avec
égard les uns des autres, mais pas à l'égard d'autres moyens de
l'accès aux données. Ainsi, pour être thread-safe sur les systèmes 32 bits, tout
l'accès à une valeur de 64 bits doivent être faites par les membres de la
Classe Interlocked.