一致發生前:深入理解
問題一:理解定義
給定的發生前一致性定義表明,對於一組操作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中文網其他相關文章!