C ++ 11 shared_ptr引用计数(递增/递减)线程安全/原子?

时间:2015-08-24 15:00:05

标签: multithreading c++11 shared-ptr

C ++ 11 shared_ptr引用计数(递增/递减)线程安全/原子?

  1. 请分享有关C ++ 11 shared_ptrs的线程安全性的见解。
  2. 是否存在任何相关问题和可能的数据争用。
  3. 可以用于异步编程吗?

2 个答案:

答案 0 :(得分:2)

如果你有两个线程,每个线程都有一个shared_ptr到同一个对象,那么这些线程就是'涉及shared_ptr的引用计数的操作将是原子的。例如,如果两个线程同时销毁它们的shared_ptr并且不存在对该对象的其他引用,则其中一个线程将销毁该对象。

当然,通过shared_ptr不会使对象本身的操作成为线程安全的。如果两个线程都访问相同的 shared_ptr(而不是同一个对象的不同shared_ptr),那么该访问将不会自动成为线程安全的。

答案 1 :(得分:1)

是的,它是线程安全的。引用计数(递增/递减)发生在const限定成员(例如复制结构的源)下,并且第17章的措辞有效地说“同时const访问应该是线程安全的”。