首頁 > 後端開發 > C++ > std::shared_ptr 對於它管理的物件來說是線程安全的嗎?

std::shared_ptr 對於它管理的物件來說是線程安全的嗎?

Patricia Arquette
發布: 2024-11-15 13:03:02
原創
331 人瀏覽過

Is std::shared_ptr thread-safe for the object it manages?

std::shared_ptr 在多大程度上確保執行緒安全?

原始問題:

  1. 參考std::shared_ptr 中的計數保證是線程安全的並且與平台無關。
  2. 只有持有最後一個引用的執行緒才會對共享物件呼叫delete。
  3. std::shared_ptr 不為其儲存的物件提供任何執行緒安全性。

答案:

是的,前兩個問題是準確的。 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板