Wie zu verstehen passiert, bevor konsequent

ImKapitel 17 von JLSEs wird ein Konzept eingeführt: passiert-bevor konsequent.

Eine Menge von Aktionen A passiert - bevor sie konsistent ist, wenn für alle Lesevorgänge r in A, wobei W (r) die Schreibaktion ist, die von r gesehen wird, weder hb (r, W (r)) noch die dort existiert ein Schreiben w in A, so dass wv = rv und hb (W (r), w) und hb (w, r)

Meines Erachtens entspricht dies folgenden Worten: ... es ist so, dass weder ... noch ...

Meine ersten beiden Fragen sind also:

ist mein verständnis richtigWas bedeutet "w.v = r.v"?

Es gibt auch ein Beispiel: 17.4.5-1

Thread 1 Thread 2

B = 1; A = 2; 

r2 = A; r1 = B; 

In der ersten Ausführungsreihenfolge:

1: B = 1;

3: A = 2;

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

4: r1 = B;  // sees initial write of 0

Die Reihenfolge selbst hat uns bereits mitgeteilt, dass zwei Threads abwechselnd ausgeführt werden. Meine dritte Frage lautet also: Was bedeutet die linke Zahl?

Nach meinem Verständnis ist der Grund, warum sowohl r2 als auch r1 das erste Schreiben von 0 sehen können, dass sowohl A als auch B nicht flüchtige Felder sind. Meine vierte Frage lautet also: Ist mein Verständnis richtig?

In der zweiten Ausführungsreihenfolge:

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 happen-before-consistency ist es nicht schwer zu verstehen, dass diese Ausführungsreihenfolge happen-before-consisted ist (wenn mein erstes Verständnis korrekt ist). Meine fünfte und sechste Frage sind also: Gibt es diese Situation (liest, sieht, schreibt, die später auftritt) in der realen Welt? Wenn ja, könnten Sie mir ein reales Beispiel geben?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage