」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 為什麼使用`emore_order_seq_cst`以設置使用`ementy_order_relaxed'檢查的停止標誌了?

為什麼使用`emore_order_seq_cst`以設置使用`ementy_order_relaxed'檢查的停止標誌了?

發佈於2025-03-23
瀏覽:279

Why Use `memory_order_seq_cst` for Setting a Stop Flag Checked with `memory_order_relaxed`? 
主線程產卵worker threads

{ //執行任務 }

主線程最終將使用memory_order_seq_cst。

Analysis:

  • mo_relaxed is Sufficient for Both Loading and Storing Stop Flag:
  • There is no significant latency benefit in utilizing stronger memory orders, even if the latency在觀察停止或keep_running標誌的變化至關重要的過程中。

    尚不清楚為什麼Sutter建議不要放鬆的商店操作。但是,ISO C標準並未指定商店的可見性時間或影響它的因素。僅要求實現在有限的時間內確保可見性。
    while (!stop.load(std::memory_order_relaxed))
    {
      // Perform tasks
    }
    seq_cst也不是seq_cst也不是放鬆的內存訂單,也不會加速商店的可見度;他們僅控制相對於商店或負載的後續操作的行為。更強的訂單不會加速事件,而是延遲其他操作,直到維持指定的順序為止。
  • 放鬆的可見性和硬件高速緩存相干性:
  • 在帶有高速緩存的硬件上,內存訂單,內存訂單不會增強商店的可見度時間。他們僅管理在存儲承諾之前在商店承諾之前變得全球可見的能力。
避免執行不必要的指令,尤其是在獲取或seq_cst負載需要其他指令的ISA上(例如,ARMV7 DMB ISH)。

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3