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?