提问人:QIhao Wu 提问时间:11/2/2023 更新时间:11/8/2023 访问量:51
如何使用atomic_store在多线程中将shared_ptr设置为 nullptr
how to use atomic_store set shared_ptr to nullptr in multithread
问:
在 std::shared_ptr 线程安全中,这样的代码不是线程安全的:
//In thread 1
shared_ptr<myClass> private = global;
...
//In thread 2
global = make_shared<myClass>();
并使用atomic_store和atomic_load是线程安全的
//In thread 1
shared_ptr<myClass> private = atomic_load(&global);
...
//In thread 2
atomic_store(&global, make_shared<myClass>());
...
我尝试使用atomic_store将 ptr 设置为 nullptr,但不允许这样做:
std::atomic_store(&global, nullptr);
我想知道为什么不能安全地将shared_ptr设置为null
答:
0赞
QIhao Wu
11/8/2023
#1
我发现我可以使用 shared_ptr() 代替 nullptr,就像这样
shared_ptr<myClass> private = global;
std::atomic_store(&global, shared_ptr<myClass>());
评论
atomic<T>
shared_ptr<myClass>
std::atomic<shared_ptr<myClass>>