Maison  >  Article  >  Java  >  La cohérence de ce qui se passe avant est-elle garantie dans chaque ordre d’exécution ?

La cohérence de ce qui se passe avant est-elle garantie dans chaque ordre d’exécution ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-01 01:01:28556parcourir

Is Happens-Before Consistency Guaranteed in Every Execution Order?

Se produit avant la cohérence : une compréhension approfondie

Question 1 : Comprendre la définition

La définition donnée de la cohérence qui se produit avant indique que pour un ensemble d'actions A, si une action de lecture r dans A voit une action d'écriture W(r), alors il ne peut pas être vrai que hb(r, W(r) ) ou qu'il existe une écriture w dans A telle que w.v = r.v et hb(W(r), w) et hb(w, r). Votre compréhension selon laquelle cela équivaut à "..., il est vrai que ni ... ni..." n'est correcte.

Question 2 : Signification de "w.v = r.v"

"w.v = r.v" indique que la valeur de l'action de lecture r (représentée par r.v) est égale à la valeur de l'action d'écriture w (représentée par w.v).

Question 3 : Signification des nombres de gauche dans les ordres d'exécution

Les nombres de gauche dans les ordres d'exécution représentent l'ordre séquentiel des actions au sein de chaque thread. Par exemple, dans le premier ordre d'exécution, "1 : B = 1" indique que la première action dans le thread 1 est l'écriture dans la variable B.

Question 4 : Visibilité des variables non volatiles

Votre compréhension que r2 et r1 peuvent voir des valeurs d'écriture initiales de 0 car A et B ne sont pas des champs volatils est correcte. Les variables non volatiles peuvent être stockées dans des registres, les rendant potentiellement invisibles aux autres threads pendant une période prolongée.

Question 5 : se produit avant la cohérence dans le deuxième ordre d'exécution

Le deuxième ordre d'exécution est en effet cohérent. Les lectures r2 et r1 se produisent respectivement après les écritures dans A et B, et aucune action intermédiaire ne viole la relation qui se produit avant.

Question 6 : Situations du monde réel avec lecture après- Écrire

Dans les applications du monde réel, des situations de lecture après écriture peuvent se produire dans divers scénarios. Par exemple, considérons une application multithread dans laquelle un thread modifie un objet partagé et un autre thread lit le même objet sans synchronisation. Sans mécanismes appropriés comme les variables volatiles ou la synchronisation, le fil de lecture peut finir par voir une valeur obsolète.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn