首頁 >後端開發 >C++ >C 整數讀寫在多執行緒環境中是原子的嗎?

C 整數讀寫在多執行緒環境中是原子的嗎?

Barbara Streisand
Barbara Streisand原創
2024-12-02 12:02:11755瀏覽

Are C   Integer Reads and Writes Atomic in Multithreaded Environments?

C 是否讀寫 Int 原子? [重複]

問題:

在一個執行緒更新而另一個執行緒讀取整數的多執行緒應用程式中,是否有必要同步對此的存取多位元組值?是否可以在完成之前中斷部分寫入,從而允許讀取捕獲不完整的值?

答案:

C 中整數讀寫的原子性取決於的架構上system.

詳細資訊:

  • 在IA32系統上:正確對齊的位址將具有原子讀取和寫入。未對齊的寫入可能是原子的,這取決於快取。
  • 快取:如果記憶體位於單一 L1 快取行中,則寫入是原子的。如果不是,則可能不是。
  • 匯流排寬度:資料匯流排的寬度會影響原子性。在一些較舊的系統上,對未對齊位址的 16 位元寫入不是原子的,而在具有更寬總線的系統上則是原子的。
  • 編譯器最佳化: 在 C/C中,標記很重要共享值是易失性的,以防止優化器假設它永遠不會在一次更新

結論:

是否需要同步取決於處理器架構、記憶體佈局、編譯器最佳化等因素。一般來說,建議同步對共享多位元組值的訪問,特別是在讀寫順序相關的關鍵部分。

以上是C 整數讀寫在多執行緒環境中是原子的嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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