下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第第页ARMv8内存系统学习笔记
#include#include#include#includestd::atomicptr;intdata;voidproducer(){std::string*p=newstd::string("Hello");data=42;ptr.store(p,std::memory_order_release);}voidconsumer(){std::string*p2;while(!(p2=ptr.load(std::memory_order_consume)));assert(*p2=="Hello");//neverfires:*p2carriesdependencyfromptrassert(data==42);//mayormaynotfire:datadoesnotcarrydependencyfromptr}intmain(){std::threadt1(producer);std::threadt2(consumer);t1.join();t2.join();}上面代码中,由于assert(data==42)不依赖consumeload指令,因此有可能在load到非空指针之前执行,这时候不保证能看到releasestore,也就不保证能看到data=42。
Sequentially-consistent
Seq-cstordering和rel-acq保证相似的内存序,一个线程的seq-cstload如果看到了另一个线程的seq-cststore,则必可以看到store之前的指令,并且load之后的指令不会被store之前的指令看到,同时,seq-cst还保证每个线程看到的所有seq-cst指令有一个一致的totalorder。
典型的使用场景是多个producer多个consumer的情况,保证多个consumer能看到producer操作的一致totalorder。
#include#include#includestd::atomicx={false};std::atomicy={false};std::atomicz={0};voidwrite_x(){x.store(true,std::memory_order_seq_cst);}voidwrite_y(){y.store(true,std::memory_order_seq_cst);}voidread_x_then_y(){while(!x.load(std::memory_order_seq_cst));if(y.load(std::memory_order_seq_cst)){++z;}}voidread_y_then_x(){while(!y.load(std::memory_order_seq_cst));if(x.load(std::memory_order_seq_cst)){++z;}}intmain(){std::threada(write_x);std::threadb(write_y);std::threadc(read_x_then_y);std::threadd(read_y_then_x);a.join();b.join();c.join();d.join();assert(z.load()!=0);//willneverhappen}上面的代码中,read_x_then_y和read_y_then_x不可能看到相反的x和y的赋值顺序,所以必至少有一个执行到++z。
Seq-cst和其它ordering混用时可能出现不符合预期的结果,如下面例子中,对thread1来说,AsequencedbeforeB,但对别的线程来说,它们可能先看到B,很迟才看到A,于是C可能看到B,得到r1=1,D看到E,得到r2=3,F看不到A,得到r3=0。
//Thread1:x.store(1,std::memory_order_seq_cst);//Ay.store(1,std::memory_order_release);//B//Thread2:r1=y.fetch_add(1,std::memory_order_seq_cst);//Cr2=y.load(std::memory_order_relaxed);//D//Thread3:y.store(3,std
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2030年中国包装装潢行业市场调查研究及投资前景展望报告
- 玻璃膏霜瓶项目可行性研究报告(目录)
- VOC检测VOCs含量第三方检测报告2025
- 布袋弹簧床芯项目可行性研究报告
- 2025年中国冬虫夏草行业投资潜力分析及行业发展趋势报告
- 2025年光纤熔接机项目可行性研究报告
- 2025国际贸易进口合同范本
- 2025粉煤灰供应合同
- 2025贵州白黔高速公路某合同段安全监理保证体系
- 2025有关房屋租赁合同解除通知书的样本
- DB-T 29-202-2022 天津市建筑基坑工程技术规程
- DB51∕T 5060-2013 四川省预拌砂浆生产与应用技术规程
- 粤教版三年级劳动与技术全册教案教学设计
- 越努力越幸运商务红色工作汇报PPT模板
- (完整版)外科学名词解释【完整版】
- 永磁同步电机控制系统设计与仿真毕业论文
- 传感器与检测技术课后习题和答案(陈杰)
- 医用红外热像仪
- 藏历新年ppt模版课件
- 基于PLC的自动门控制系统
- 沪教牛津版小学四年英语上册全册教案
评论
0/150
提交评论