为什么std :: shared_ptr使用原子cpu操作

时间:2012-01-23 23:56:55

标签: c++ c++11 shared-ptr atomic

我有一个问题,理解为什么shared_ptr使用原子CPU指令...我无法弄清楚原因,因为它不是线程安全的。 有人可以解释一下。

如果你想知道我是如何知道它使用原子intstuructions:有一个来自C ++的剪辑,除了Herb和Andrei谈论它之外,但他们从未提及为什么会这样的原因。

2 个答案:

答案 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/