Maison  >  Article  >  Java  >  Que signifie « la cohérence se produit avant » dans le contexte de la spécification du langage Java ?

Que signifie « la cohérence se produit avant » dans le contexte de la spécification du langage Java ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-31 12:28:02387parcourir

What does

Comprendre la cohérence avant qu'elle se produise

Dans le chapitre 17 de la spécification du langage Java (JLS), la « cohérence qui se produit avant » est définie comme suit :

"Un ensemble d'actions A est cohérent avant tout si pour toutes les lectures r dans A, où W(r) est l'action d'écriture vue par r, il n'est pas 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)."

Cette définition peut être simplifiée comme : pour qu'un ensemble d'actions soit cohérent avant, aucune lecture ne doit voir une écriture qui se produit plus tard, et aucune écriture ne doit être suivie d'une lecture qui voit une valeur antérieure.

Vos questions

  • Vos deux premières questions :

    • Oui, votre compréhension de la définition est correcte.
    • "w.v = r.v" signifie que la valeur écrite par l'action d'écriture w est la même que la valeur lue par l'action de lecture r.
  • Votre troisième question :

    Les chiffres à gauche des actions dans les ordres d'exécution représentent l'ordre séquentiel dans lequel les actions ont été exécutées.

  • Votre quatrième question :

    Oui, votre compréhension selon laquelle r2 et r1 ont tous deux vu l'écriture initiale de 0 car A et B ne sont pas des champs volatils est correcte. Les champs non volatils peuvent être stockés dans des registres, ce qui peut entraîner des incohérences temporaires.

  • Vos cinquième et sixième questions :

    La situation décrite dans le deuxième ordre d'exécution, où les lectures voient les écritures qui se produisent plus tard, peuvent se produire dans des scénarios multithread réels. Un exemple pourrait être :

    • Le thread A écrit dans une variable partagée X.
    • Le thread B lit la valeur de X plus tard, mais en raison des retards de cohérence du cache, il voit l'ancienne valeur.

    Pour éviter de telles incohérences, des champs volatiles peuvent être utilisés pour garantir que les lectures et les écritures sont effectuées de manière cohérente.

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