理解發生前一致性
Java 語言規範(JLS) 中發生前一致性的概念是指以下內容的一致順序:在多執行緒環境中讀取和寫入。
Happens-Before 一致性的定義
如果對於每個讀取r,一組操作A 是發生前一致的在A 中,其中W(r ) 是r 看到的寫入操作:
已回答的問題
1.你的理解正確嗎?
是的,你的理解是正確的。 「它等於以下單字:...,情況是既不...也不...」是正式定義的邏輯等價物。
2. 「w.v = r.v」是什麼意思?
w.v 和 r.v 分別指寫入 w 和讀取 r 存取的變數的值。條件 w.v = r.v 表示兩個操作中讀取的值相同。
3.執行順序中左邊的數字代表什麼?
左邊的數字代表原始程式碼中的操作順序。
4.您對 volatile 欄位的理解正確嗎?
是的,您的理解是正確的。在第一個執行順序中,r2 和 r1 都看到初始寫入 0,因為 A 和 B 是非揮發性字段,允許延遲或不一致的讀取。
5。這種情況(讀後看到寫)在現實世界中存在嗎?
是的,它可以存在。一個例子是,當兩個執行緒透過自己的暫存器存取共享資料時,最佳化會阻止讀取執行緒偵測寫入執行緒所做的變更。
6.你能舉一個真實的例子嗎?
考慮以下示例:
線程1
<code class="java">volatile boolean running = true;</code>
線程2
<code class="java">while (running) { // Perform task }</code>
在這個例子中,如果讀取執行緒的最佳化阻止它載入更新的running 值,它將繼續看到過時的值並無限期地執行循環,即使執行緒1 已經將running 設為錯誤。
以上是Java 中的「發生之前」一致性是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!