Comprendre la cohérence qui se produit avant
Le concept de cohérence qui se produit avant dans la spécification du langage Java (JLS) fait référence à l'ordre cohérent des lit et écrit dans un environnement multithread.
Définition de la cohérence avant l'arrivée
Un ensemble d'actions A est cohérent avant l'arrivée si, pour chaque lecture r dans A où W(r) est l'action d'écriture vue par r :
Questions répondues
1. Votre compréhension est-elle correcte ?
Oui, votre compréhension est correcte. "Cela équivaut aux mots suivants : ..., il est vrai que ni ... ni..." n'est un équivalent logique de la définition formelle.
2. Que signifie "w.v = r.v" ?
w.v et r.v font référence aux valeurs de la variable accédées par l'écriture w et la lecture r, respectivement. La condition w.v = r.v signifie que les valeurs lues dans les deux actions sont les mêmes.
3. Que représentent les chiffres de gauche dans les ordres d'exécution ?
Les chiffres de gauche représentent l'ordre des actions dans le code d'origine.
4. Votre compréhension des champs volatils est-elle correcte ?
Oui, votre compréhension est correcte. Dans le premier ordre d'exécution, r2 et r1 voient tous deux l'écriture initiale de 0 car A et B sont des champs non volatils, permettant des lectures retardées ou incohérentes.
5. La situation (les lectures voir les écritures qui se produisent plus tard) existe-t-elle dans le monde réel ?
Oui, elle peut exister. Un exemple est lorsque deux threads accèdent aux données partagées via leurs propres registres et que les optimisations empêchent le thread de lecture de détecter la modification apportée par le thread d'écriture.
6. Pourriez-vous donner un exemple réel ?
Considérons l'exemple suivant :
Thread 1
<code class="java">volatile boolean running = true;</code>
Thread 2
<code class="java">while (running) { // Perform task }</code>
Dans cet exemple, si l'optimisation du thread de lecture l'empêche de charger la valeur mise à jour de running, il continuera à voir la valeur obsolète et exécutera la boucle indéfiniment, même si le thread 1 a déjà défini running sur faux.
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!