关于weak_ptr的线程安全性

 nnbji 发布于 2023-02-08 20:40

我知道我迟到了,但是在搜索"weak_ptr线程"时会出现这种情况,而Casey的回答并不是全部真相.二者shared_ptrweak_ptr可以从线程使用而无需进一步的同步.

因为shared_ptr,有很多文档(例如在cppreference.com或stackoverflow上).您可以安全地shared_ptr从不同的线程访问该对象.你无法从两个线程敲击相同的指针.换一种说法:

// Using p and p_copy from two threads is fine.
// Using p from two threads or p and p_ref from two threads is illegal.
std::shared_ptr p = std::make_shared();
std::shared_ptr &p_ref = p;
std::shared_ptr p_copy = p;

要在代码中解决该问题,请将g_s参数(按值)传递给*f1().

对于弱指针,安全保证隐藏在weak_ptr :: lock的文档中:

有效地返回expired() ? shared_ptr() : shared_ptr(*this),以原子方式执行.

您可以使用从其他线程weak_ptr::lock()获取a shared_ptr而无需进一步同步.这也证实了这里的升压和这个苏答案克里斯小丑,年轻.

同样,你必须确保不修改相同weak_ptr,而从另一个访问它从一个线程,所以传球g_wf3()由价值为好.

撰写答案
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有