内存序列-memor order

内存序

今天看内存序看的要崩溃了,太乱了,不同人的博客常常出现前后不一致的情况。这个工作只是临时起意,也不是什么意义重大的工作,因此也没有寻找更权威的资料,最主要的参考是cplusplus上的reference,如果有错误之外,真心希望您来指正一下,自己真的逐个字死磕类型的。

为何需要内存序

在实际的程序运行过程中,如果不使用任何的同步原语,那么很多变量的执行结果,乃至程序的最终行为是无法预料的。具体来说,影响主要有以下几个点:

  1. 编译器指令的重新排列:编译器出于优化的考虑,会对生成的指令代码进行重新排列,而排列的代码可能在多线程运行中引起不可预料的结果。要注意的是,在单线程"顺序执行"的情况下,这种重排并不会影响程序结果。
  2. cpu cache:例如对内存的某个变量的写操作,可能先写入了cache,而并没有立刻被其他线程看到
  3. 指令的非原子性:例如某个操作需要涉及多条指令,而我们希望这个操作是个原子操作,不能被其他线程看到操作的中间结果(因为中间结果可能无任何意义)。

为了能够准确的控制内存读写操作的可见性,保证多线程的读写情况下变量结果的正确,需要一定的内存序的语义支持。传统的方案常采用机制,以控制多线程之间的并行访问,但是它的代价相对较高

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值