原始問題:
答案:
是的,前兩個問題是準確的。 std::shared_ptr 的參考計數和析構函式呼叫是線程安全的。
第三個問題也是正確的。 std::shared_ptr 不保證其中儲存的物件的線程安全。物件本身可能不是線程安全的,因此,在沒有適當同步的情況下從多個線程訪問它可能會導致未定義的行為。
範例:
考慮以下內容一塊偽代碼:
// Thread I shared_ptr<A> a (new A (1)); // Thread II shared_ptr<A> b (a); // Thread III shared_ptr<A> c (a); // Thread IV shared_ptr<A> d (a); d.reset (new A (10));
不,只有d會指向新的A(10),而a, b,c會繼續指向原來的A(1)。
這是因為reset()不會影響其他執行緒對同一個物件的參考。 d 是唯一指向新實例的共用指針,而其他參考(a、b 和 c)將仍指向原始實例。以上是std::shared_ptr 對於它管理的物件來說是線程安全的嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!