Meyers 單例實作的執行緒安全性
在提供的具有延遲初始化的Meyers 單例實作中,程式碼在C 語言中是線程安全的11. 根據C 11 標準(§6.7 [stmt.dcl] p4),如果多個執行緒嘗試存取初始化期間單例,其他執行緒將等待初始化完成。
GCC 和Visual Studio 都支援此執行緒安全功能(動態初始化和同時銷毀),儘管實作日期不同:
相較之下,這段程式碼在 C 03 中不是線程安全的。 Meyers 的文章「C 和雙重檢查鎖定的危險」分析了單例模式的各種線程安全實現。最終,Meyers 得出結論:(在 C 03 中)在實例化方法周圍使用完全鎖定是確保跨不同平台並發性的最直接方法。另一方面,雙重檢查鎖定模式變體可能會在某些架構上引入競爭條件,除非在指令之間策略性地放置記憶體屏障。
以上是Meyers 的單例實作在 C 11 和 C 03 中是線程安全的嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!