共享內存IPC同步(無鎖)
問題:
開發者尋求一種在Intel x64 伺服器上涉及多個進程並在循環緩衝區中共享資料的場景中共享記憶體IPC 的有效同步機制。他們建議利用記憶體屏障來確保跨 CPU 的資料可見性,從而實現無縫讀取/寫入存取。然而,GCC 記憶體屏障未能達到預期。
答案:
Boost Interprocess 的單一生產者單一消費者 (SPSC) 佇列 spsc_queue 提供了無鎖定機制共享記憶體 IPC 佇列的解決方案。
實作:
定義類型:
定義自訂類型管理共享記憶體和字串分配:
開啟或建立共享記憶體如果存在)。 持續監視佇列中的待處理作業並處理它們。
開啟或建立共享記憶體段並定位共享佇列。 定期將訊息推送到佇列。
用法範例:
以上是## 為什麼 GCC 記憶體屏障無法保證 x64 上共享記憶體 IPC 中的資料可見性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!