Wie man versteht, geschieht – bevor es konsistent istJava

Java-Forum
Anonymous
 Wie man versteht, geschieht – bevor es konsistent ist

Post by Anonymous »

In Kapitel 17 von JLS wird ein Konzept eingeführt: Passiert-vor-Konsistenz.


Eine Reihe von Aktionen A ist passiert-vor-konsistent, wenn für alle Lesevorgänge r in A, wobei W(r) die von r gesehene Schreibaktion ist, weder hb(r, W(r)) noch ein Schreib-w in A existiert, so dass w.v = r.v und hb(W(r), w) und hb(w, r)"


Nach meinem Verständnis entspricht es den folgenden Wörtern:
..., es ist so, dass weder ... noch ...

Meine ersten beiden Fragen sind also:
  • Ist mein Verständnis richtig?
  • Was bedeutet "w.v = r.v" bedeuten?
Es gibt auch ein Beispiel: 17.4.5-1

Code: Select all

Thread 1 Thread 2

B = 1; A = 2;

r2 = A; r1 = B;
In der ersten Ausführungsreihenfolge:

Code: Select all

1: B = 1;

3: A = 2;

2: r2 = A;  // sees initial write of 0

4: r1 = B;  // sees initial write of 0
Der Befehl selbst hat uns bereits mitgeteilt, dass zwei Threads abwechselnd ausgeführt werden, daher lautet meine dritte Frage: Was bedeutet die linke Zahl?

Nach meinem Verständnis liegt der Grund für das anfängliche Schreiben von 0 sowohl bei r2 als auch bei r1 darin, dass sowohl A als auch B keine flüchtigen Felder sind. Meine vierte Frage lautet also: Ist mein Verständnis richtig?

In zweiter Ausführungsreihenfolge:

Code: Select all

1: r2 = A;  // sees write of A = 2

3: r1 = B;  // sees write of B = 1

2: B = 1;

4: A = 2;
Gemäß der Definition von „passiert vor der Konsistenz“ ist es nicht schwer zu verstehen, dass diese Ausführungsreihenfolge „passiert vor der Konsistenz“ ist (wenn mein erstes Verständnis korrekt ist).
Meine fünfte und sechste Frage lauten also: Existiert diese Situation (Lesevorgänge siehe später auftretende Schreibvorgänge) in der realen Welt? Wenn ja, könnten Sie mir ein reales Beispiel geben?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post