c++ - 如何“原子地”总结 C++ 向量的元素?
问题描述
有多种方法可以总结 C++ vector 的元素,但是如何“原子地”保证这一点?在求和动作期间,向量的元素可能被其他线程修改,导致未知结果。有没有一种无锁的方法来防止向量被修改,直到求和完成?
解决方案
在线程之间共享对向量的可变引用可能会导致非常奇怪的错误。例如,可以通过在另一个线程中追加或删除项目来使读取迭代器无效。
恕我直言,唯一的解决方案是将向量隐藏在某个层后面,该层记录了修改线程中的插入/删除/更新,这样该线程就不必获取互斥体,因此不会阻塞。一旦它可以获取互斥体,它就可以应用排队的突变。
也就是说,您可以考虑一次只由一个线程拥有和引用该向量,以避免所有这些问题。
推荐阅读
- ruby-on-rails - 使用 JWT 令牌在 Rails 应用程序之间验证用户
- ios - 从容器视图导航到全屏 - Swift 4
- python-3.x - 如何为给定数量的 n 个元素在一行中输入数字数组(不是每行一个输入)并在 Python 中创建一个列表?
- html - 放大 chrome 时忽略 div
- c# - 将双精度设置为文字然后进行比较是否安全
- mysql - 尝试使用 brew 安装 mysql 时出现 git 错误
- javascript - 匹配浮点数列表的正则表达式
- javascript - jQuery toggleClass 不会触发调整浏览器大小的工作?
- jboss-arquillian - 远程容器中的 Arquillian + ear + wildfly = NoSuchMethodError
- json - 如何将 PHP 数组转换为 JSON 数组?