C ++ shared_ptr如何确保线程安全?

时间:2016-06-19 14:43:37

标签: c++ multithreading pointers shared

所有:  根据{{​​3}} c ++实现,通常使用原子引用计数来确保线程安全,但在某些情况下这似乎是错误的。

```

void func2(shared_ptr<int>* x) {
  shared_ptr<int> a(*x);
  *a += 1;
}

thread func1() {
 shared_ptr<int> a1(new int(10));
 thread t (func2, &a1);
 return t;
}

```

如上面的代码所示,如​​果在内部引用计数a1减少后func2中的复制结构发生了,那么指针将被删除两次,对吗?

1 个答案:

答案 0 :(得分:4)

原子引用计数确保只有引用计数是线程安全的。它不会将引用的类转换为线程安全类。它不会阻止您编写线程不安全的代码,例如将指针传递给std::shared_ptr到新线程,但在新线程有机会获取它自己的副本之前销毁它。 / p>

您仍然负责编写线程安全逻辑。但是你可以依赖引用计数是线程安全的。