1

这更像是一个好奇的问题,但由于 boost::shared_ptr 不是线程安全的,为什么还要使用原子引用计数呢?由于析构函数不能安全地跨线程使用,我没有看到这一点。

例如,如果您将 shared_ptr 的副本传递给线程,它总是会破坏,至少在线程最迟结束时是这样。

4

1 回答 1

4

我认为您误解了共享指针的线程安全限制。共享指针本身不是线程安全的,因为您不想在两个不同的线程中操作相同的共享指针。然而,同时在两个不同的线程中操作同一个对象几乎是不安全的,而且对于大多数对象来说这不是线程安全的。

在两个不同的线程中操作两个不同的共享指针完全线程安全的,即使它们是指向同一个对象的指针。

例如,一个线程可以创建一个对象和一个指向它的共享指针。然后它可以创建另一个指向同一个对象的共享指针。然后一个线程可以操作第一个共享指针,另一个线程可以操作第二个共享指针。当两个共享指针中的最后一个(以及任何额外的副本)消失时,对象将被销毁。

于 2012-11-30T03:26:53.433 回答