[问题] 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