c++ & Memory consistency model

c++11中一个最重要的特性就是加入了多线程的支持,并定义了c++的memory model。memory model定义了一个处理器上对内存的操作如何被其他处理观察到,


The memory model, or memory consistency model, specifies the values that a shared variable read in a multithreaded program is allowed to return.


上面的定义出自Foundation of C++ Memory Model


下面我收集了一些最近学习时搜到的相关资料,以供参考:

1. http://herbsutter.com/2013/02/11/atomic-weapons-the-c-memory-model-and-modern-hardware/

    里面有两段视频,描述了c++的atomic和sequential consistency。

2. Foundation of C++ Memory Model

    定义了c++的内存模型

3. http://regal.csep.umflint.edu/~swturner/Classes/csc577/Online/Chapter06/img06.html

    www.cs.cmu.edu/~srini/15-446/S09/lectures/10-consistency.pdf

    关于一些内存模型的定义

4. http://en.wikipedia.org/wiki/Sequential_consistency

    sequential consistency的定义


这里我来总结一下sequential consistency(SC)。SC的最初的定义见上面4,如下


the result of any execution is the same as if the operations of all the processors were executed in some sequential order, and the operations of each individual processor appear in this sequence in the order specified by its program


这里的意思可以理解为,所有的read/write操作有一个total order(全序),每一个处理器上的read write都是这个全序的子序列,并且是按照program order执行的(这个就可以理解为c++11中定义的sequenced before关系)。简单地说,所有的处理器看到的修改必须是一致的,即下面的操作(a)是合法的,而(b)是非法的。


这里Px代表不同处理器,从左到右代表时间序,定义W(x)a为在x上写入a,R(x)a为在x上读取得到a,定义“>”为操作的全局顺序。(a)合法是因为P3和P4读取到了相同的修改,即b>a,而(b) 中确不是如此。

有人会问,既然是时间序,那么为什么是b>a,而不是a>b,因为SC和时间无关,定义中只是说所有的RW有一个total order,即下面的total order是合法的,


W(x)b [P1] > R(x)b [P3] > R(x)b [P4] > W(x)a [P1] > R(x)a [P3] > R(x)a [P4]


与时间相关的consisitency model,有strict consistencylinearizability

c++的sequential consistency model,仅在使用seq_cst的atomic和mutex时才会保证,但是c++也提供了release consistency,即acquire/release操作进行同步,当正确使用后,会提供类似sequential consistency的保证,但是区别在于sequential consistency是全局的,对所有的操作有效,但是acquire/release仅对某个atomic对象有效。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值