std::shared_ptr 的線程安全
您從 MSDN 引用的有關 std::shared_ptr 線程安全的聲明可能會被誤解。這表示雖然多個執行緒可以同時讀寫不同的shared_ptr對象,但這並不能保證修改shared_ptr物件本身的安全性。
TL;DR:
std::shared_ptr 的線程安全僅適用於指向同一底層物件的多個指標的管理。它不會擴展到共享物件的內容或對shared_ptr實例的並發寫入。
詳細說明:
shared_ptr內部由兩個元件組成:
範例:
在您的程式碼片段中,global 是指向設定物件的共用指標。執行緒 1 將 global 複製到它自己的共用指標 private 中。如果執行緒 2 隨後修改 global,private 仍將指向原始設定對象,因為控制塊未修改。但是,如果執行緒 2 將新的設定物件指派給全域,則 private 仍將指向原始物件。
指向物件的執行緒安全性:
安全地進行操作的能力透過多個執行緒修改指向的物件取決於物件的實作。對於您的配置類,如果它允許並發寫入而不同步,例如添加或刪除設置,則程式碼將不是線程安全的。
解決方案:
為了確保物件修改的執行緒安全,請使用std::mutex等同步機制來保護對shared_ptr物件或共享物件本身的存取。
以上是std::shared_ptr 真的是線程安全的嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!