Understanding Happens-Before-Konsistenz
In Kapitel 17 der Java Language Specification (JLS) ist „Happens-Before-Konsistenz“ definiert als folgt:
„Eine Reihe von Aktionen A ist „passiert-vorher“ konsistent, wenn für alle Lesevorgänge r in A, wobei W(r) die von r gesehene Schreibaktion ist, es nicht der Fall ist, dass entweder hb(r , W(r)) oder dass es ein geschriebenes w in A gibt, so dass w.v = r.v und hb(W(r), w) und hb(w, r).“
Diese Definition kann vereinfacht werden B.: Damit eine Reihe von Aktionen ausgeführt werden, bevor sie konsistent sind, sollte bei keinem Lesevorgang ein Schreibvorgang erfolgen, der später erfolgt, und auf keinen Schreibvorgang sollte ein Lesevorgang folgen, der einen früheren Wert erkennt.
Ihre Fragen
Ihre ersten beiden Fragen:
Ihre dritte Frage:
Die Zahlen links neben den Aktionen in den Ausführungsanweisungen stellen die Reihenfolge dar, in der die Aktionen ausgeführt wurden.
Ihre vierte Frage:
Ja, Ihr Verständnis, dass sowohl r2 als auch r1 das anfängliche Schreiben von 0 gesehen haben, weil A und B keine flüchtigen Felder sind, ist richtig. In Registern können nichtflüchtige Felder gespeichert werden, was zu temporären Inkonsistenzen führen kann.
Ihre fünfte und sechste Frage:
Die beschriebene Situation in der zweiten Ausführungsreihenfolge, in der Lese- und Schreibvorgänge später erfolgen, kann es in realen Multithread-Szenarien vorkommen. Ein Beispiel könnte sein:
Um solche Inkonsistenzen zu verhindern, können flüchtige Felder verwendet werden, um sicherzustellen, dass Lese- und Schreibvorgänge auf eine konsistente Art und Weise ausgeführt werden, bevor sie passieren.
Das obige ist der detaillierte Inhalt vonWas bedeutet „passiert vor der Konsistenz' im Kontext der Java-Sprachspezifikation?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!