35 votes

Est-ce que l'affectation de variables et la lecture d'opération atomique?

J'ai été incapable de trouver une référence dans la documentation...

Est de l'affectation à un double (ou tout autre type simple, y compris boolean) une opération atomique du point de vue des threads?

double value = 0;

public void First() {
 while(true) {
  value = (new Random()).NextDouble();
 }
}

public void Second() {
 while(true) {
  Console.WriteLine(value);
 }
}

Dans cet exemple de code, la première méthode est appelée dans un thread, et la deuxième dans l'autre. La deuxième méthode d'obtenir une foiré de valeur que si elle obtient de son exécution lors de l'affectation à la variable dans un autre thread?

Je ne m'inquiète pas si je reçois l'ancienne valeur, il est important de recevoir une valeur valide (pas celui où 2 sur 8 octets sont installés). Je sais que c'est une question stupide, mais je veux être sûr, car je ne sais pas comment CLR fait ensembles de variables.

24voto

thecoop Points 23695

Pour répondre à ta question, non. Les assignations aux doubles ne sont pas garanties comme étant atomiques. Les documents sont disponibles ici . Fondamentalement, les types <= 32 bits intégrés sont atomiques, les types> = 64 bits ne le sont pas. Pour les opérations atomiques sur les types 64 bits, vous pouvez utiliser les méthodes de System.Threading.Interlocked.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X