为什么boost :: shared_ptr在没有线程安全的情况下会对原子引用计数感到困扰?

时间:2012-11-30 03:22:00

标签: multithreading shared-ptr atomicreference

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

例如,如果将shared_ptr的副本传递给线程,它将始终销毁,至少在线程最迟结束时。

1 个答案:

答案 0 :(得分:4)

我认为你误解了共享指针的线程安全限制。从某种意义上说,共享指针本身不是线程安全的,因为您不希望在两个不同的线程中操作相同的共享指针。但是,同时在两个不同的线程中操作同一个对象几乎绝不安全,而且大多数对象都不是线程安全的。

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

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

相关问题