C 共享_ptr如何确保线程安全性



all: 根据此页面,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;
}

````

正如上面代码所示,如果func2中的复制构造发生在A1的内部参考计数减少之后,则指针将被删除两次,对吗?

原子参考计数确保只有参考计数是安全的。它不会将引用类变成线程安全类。它不会阻止您编写线程安全代码,例如将std::shared_ptr指针传递给新线程,而是在新线程有机会获取自己的IT副本之前将其销毁。

您仍然负责编写线程安全逻辑。但是您可以依靠参考计数是线程安全的。

最新更新