我有一个问题,理解为什么shared_ptr使用原子CPU指令...我无法弄清楚原因,因为它不是线程安全的。 有人可以解释一下。
如果你想知道我是如何知道它使用原子intstuructions:有一个来自C ++的剪辑,除了Herb和Andrei谈论它之外,但他们从未提及为什么会这样的原因。
答案 0 :(得分:15)
shared_ptr
的任何实例都是多线程安全的。它指向的数据不是多线程安全的。请参阅this。
原子指令,如果正确应用(通过竞争线程访问以相同顺序完成保护)是实现线程安全的一种方法。另一种方法是使用互斥锁。
查看BOOST的类似问题:Is boost shared_ptr xxx thread safe?
答案 1 :(得分:2)
Herb Sutter在他的新手95中使用了shared_ptr作为一个很好的例子,他去那里详细说明了设计决定:
https://herbsutter.com/2014/01/13/gotw-95-solution-thread-safety-and-synchronization/