| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> C++11多线程 内存序(std::memory_order_consume) -> 正文阅读 |
|
[C++知识库]C++11多线程 内存序(std::memory_order_consume) |
引言在C++多线程 内存序系列文章中,已经介绍了如下三种内存序 C++11多线程 内存序(std::memory_order_seq_cst ) C++11多线程 内存序(std::memory_order_acquire/release) C++11多线程 内存序(std::memory_order_relaxed) 为了保持该系列文章的完整性,因此增加std::memory_order_consume的介绍。 std::memory_order_consume仅仅只用来补充该系列的完整性,在实际代码中不能使用该内存序,且在GCC中会自动将该内存序转换为std::memory_order_acquire。参考至Fixing GCC's Implementation of memory_order_consume data dependency介绍要理解和使用std::memory_order_consume,需要先理解什么是data dependency。在C++中data dependency可分为如下两种:
关于上述两种解释可参考下图 ? dependency-ordered-before需要应用在线程间,上图中A进行Store操作happens-before B进行的load操作,且B操作carries-a-dependency-to C操作,因此由于可传递性,A happens-before? C。 std::memory_order_consume代码示例该代码均来自于《Concurrency in Action C++》相应章节。 注:std::memory_order_consume具有弱的同步和内存序限制,即不会像std::memory_order_release产生同步与关系。 具体可参考如下代码:
上述代码中,use_x中assert(a.load(std::memory_order_relaxed)==99) 可能触发断言。 原因为: x通过std::memory_order_consume所得,由data dependency介绍部分知,操作p.store(x, std::memory_order_release)?dependency-ordered-before 语句while (!(x = p.load(std::memory_order_consume))),而该语句又carries-a-dependency-to *x,因此针对use_x中前两个assert均不会失败。 由于std::memory_order_consume具有弱的同步关系,因此无法保证a的值为99,故触发断言。 总结至此,关于C++多线程 内存序相关文章总结完成。为了完善C++多线程内存序相关工作,后续会讲解 release sequence以及fence相关的内容。 |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 3:13:22- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |