簡體   English   中英

非原子對象在所有線程中都具有相同的修改順序嗎? (沒有數據競賽)

[英]Do non-atomic objects have same modification order in all threads? (in absence of data races)

1.10 / 6:

對特定原子對象M的所有修改都以某種特定的總順序出現,稱為M的修改順序。

非原子對象在所有線程中也具有相同的修改順序嗎? 我對正確同步的情況感興趣(沒有數據競賽等)。

您需要在所有參與的線程之間進行同步。

如果你有一個(或多個)線程更新非原子值(在其組之間有任意數量的同步操作)和另一個線程讀取該值(不與任何更新程序線程同步),你甚至不能保證您將讀取其他線程存儲的值之一。

通常,如果一個線程更新非原子變量而另一個線程在沒有這兩個操作之間正確同步的情況下訪問 (更新或讀取)它,則會出現數據爭用 數據爭用導致未定義的行為。

如果您“正確地同步”對非原子變量的訪問,您將在任何修改與另一個(或當然是相同的)線程中的任何訪問之間建立先發生關系。 這包括任何兩個修改之間的關系。

這種情況發生在關系在所有線程中有效並在修改之間產生總順序之前。 所以,是的:正確同步使用會給你一個完整的修改順序(對於使用相同的同步操作同步的所有變量,它甚至是相同的)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM