在这种情况下如何使 shared_ptr 线程安全?
How to make shared_ptr thread safe in this case?
在 boost doc(Shared_ptr doc) 中,我看到有一个线程不安全的例子:
//--- Example 4 ---
// thread A
p3 = p2; // reads p2, writes p3
// thread B
// p2 goes out of scope: undefined, the destructor is considered a "write access"
这种情况怎么处理?如果 p2 超出范围,我该如何控制?
自 C++11 起尝试 atomic_store
http://www.cplusplus.com/reference/atomic/atomic_store/
示例:
atomic_store(&p3, p2);
更多示例:
// thread A
p3 = atomic_load(&p2);
...
// thread B
atomic_store(&p2, make_shared<Foo>());
相同的规则适用于(几乎)所有类型:如果它们在另一个线程中被销毁,则不要在一个线程中访问它们。
同样的解决方案也适用:使用互斥锁或原子操作来同步对线程间共享变量的并发访问。
在 boost doc(Shared_ptr doc) 中,我看到有一个线程不安全的例子:
//--- Example 4 ---
// thread A
p3 = p2; // reads p2, writes p3
// thread B
// p2 goes out of scope: undefined, the destructor is considered a "write access"
这种情况怎么处理?如果 p2 超出范围,我该如何控制?
自 C++11 起尝试 atomic_store
http://www.cplusplus.com/reference/atomic/atomic_store/
示例:
atomic_store(&p3, p2);
更多示例:
// thread A
p3 = atomic_load(&p2);
...
// thread B
atomic_store(&p2, make_shared<Foo>());
相同的规则适用于(几乎)所有类型:如果它们在另一个线程中被销毁,则不要在一个线程中访问它们。
同样的解决方案也适用:使用互斥锁或原子操作来同步对线程间共享变量的并发访问。