首頁  >  文章  >  Java  >  每個執行訂單是否保證 Happens-Before 的一致性?

每個執行訂單是否保證 Happens-Before 的一致性?

Susan Sarandon
Susan Sarandon原創
2024-11-01 01:01:28556瀏覽

Is Happens-Before Consistency Guaranteed in Every Execution Order?

一致發生前:深入理解

問題一:理解定義

給定的發生前一致性定義表明,對於一組操作A,如果A 中的讀取操作r 看到寫入操作W(r),則不可能是hb(r, W(r) ) 或A 中存在寫入w ,使得w.v = r.v 且hb(W(r), w) 和hb(w, r)。您認為它等同於“...,事實上既不是...也不是...”是正確的。

問題2:「w.v = r.v」的意思

「w.v = r.v」表示讀取操作r(以r.v 表示)的值等於寫操作w(以w.v 表示)的值。

問題3:執行順序中左邊數字的意義

執行順序中左邊的數字代表每個執行緒內操作的順序。例如,在第一個執行順序中,「1: B = 1」表示執行緒 1 中的第一個操作是寫入變數 B。

問題4:非揮發性變數的可見性

您對r2 和r1 都可以看到初始寫入值0 因為A 和B 不是易失性字段的理解是正確的。非揮發性變數可以儲存在暫存器中,這可能會使它們在較長時間內對其他執行緒不可見。

問題 5:第二個執行順序中發生的一致性

第二個執行順序確實是happens-before一致的。讀取 r2 和 r1 分別發生在寫入 A 和 B 之後,並且不存在違反發生之前關係的干預操作。

問題6:具有Read-After- 的真實情況寫入

在實際應用中,先寫後讀的情況可能會發生在各種場景中。例如,考慮一個多執行緒應用程序,其中一個執行緒修改共享對象,而另一個執行緒在不同步的情況下讀取同一對象。如果沒有適當的機制,例如揮發性變數或同步,讀取執行緒最終可能會看到過時的值。

以上是每個執行訂單是否保證 Happens-Before 的一致性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn