[問題] shared_ptr 是否 atomic or thread safe

作者: lovejomi (JOMI)   2019-07-12 11:06:48
這問題一直是讓我很難理解
我看了 cppreference, 他提到 你只要用了non-const method的話就不thread safe
問題出在
https://en.cppreference.com/w/cpp/memory/shared_ptr/operator%3D
這不是non-const , 而我看到的程式碼(也許早就寫錯了)
我並沒有看到mutex or 一些保護機制去保護shared_ptr assignment
假設一個情況
Thread1
mSp = nullptr; 內部應該是refcount
作者: steve1012 (steve)   2019-07-12 12:20:00
連結沒看到程式碼
作者: sifmelcara (sifmelcara)   2019-07-12 13:56:00
不同thread操作同一個instance才會沒有thread safetyrefcount要atomic的目的就是讓不同thread使用指向同個地方的shared_ptr的操作是thread safe的
作者: eye5002003 (下一夜)   2019-07-12 18:42:00
atomic比較便宜,C++就是這麼節儉
作者: Caesar08 (Caesar)   2019-07-12 19:10:00
所以也有提供 https://tinyurl.com/y5up2jcs但是因為使用者常常不知道什麼時候該用atomic所以後來就直接提供 https://tinyurl.com/yy33lelq
作者: developers (rejuvenate)   2019-07-14 11:42:00
目前版本的shared_ptr和weak_ptr只有保證increment和decrement ref count是atomic的,還有resource只會被delete一次,但都不保證存取resource 是atomic。C++20 有atomic_shared_ptr和atomic_weakk_ptr會解決這個問題shared_ptr assignment threadsafe 的寫法 用c++17是atomic_store(&ptr, localPtr)來代表 ptr = localPtr後者的結果是undefined behavior 因為有data race

Links booklink

Contact Us: admin [ a t ] ucptt.com