併發:了解C 11 記憶體模型中的原子性和易失性
考慮由在不同核心上同時運行的多個線程訪問的全域變數。每個線程都可以寫入和讀取變數。一個執行緒可以從原子變數中讀取過時的資訊嗎?
易失性和原子:區別
雖然原子意味著原子訪問,但單獨的易失性並不意味著原子訪問。 Volatile 可用於記憶體映射 I/O 和訊號處理等情況。當與 std::atomic 配對時,它變得多餘。此外,它與原子存取或執行緒間記憶體順序無關。
原子變數的記憶體排序
C 11 中的std::atomic 函式庫提供了一個原子整數型,
std::atomic<int>;人工智慧; </int>
讀取-修改-寫入(RMW) 操作:保證新鮮度
RMW 操作,如Exchange()、compare_exchange_strong() 和fetch_add( ),提供了保證:它們始終作用於最新值。在多個執行緒對 ai.fetch_add(1) 的一系列呼叫中,不會傳回重複或缺少的數字。但是,線程可能會在不同的時間點看到這些值。
注意事項與結論
理解原子操作至關重要。建議在生產程式碼中使用它們之前進行徹底的研究和程式碼審查。鎖通常提供一種更易於訪問且幾乎同樣高效的並發方法。
以上是一個執行緒可以從 C 11 原子變數讀取陳舊資料嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!