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对象有效。


### 回答1: 《a primer on memory consistency pdf》是一本关于内存一致性的入门指南。内存一致性是指在多线程编程中,对共享变量的访问操作的执行顺序保持一致的问题。在多核处理器上运行的并发程序中,由于缓存、指令重排等因素的存在,不同核之间读写共享变量的顺序可能不同,从而导致程序产生错误的结果。 这本《a primer on memory consistency pdf》通过深入浅出的方式介绍了多线程编程中的内存一致性问题及其解决方案。首先,它解释了为什么多线程程序需要关注内存一致性,并对内存模型进行了详细的介绍。然后,它介绍了在不同内存模型下,程序的执行顺序可能发生的变化,并举例说明了这些变化可能带来的问题。 接着,书中详细介绍了一些常见的内存一致性模型,如顺序一致性、弱一致性、松散一致性等,并解释了它们之间的区别和适用场景。同时,还介绍了如何使用同步原语(如锁、原子操作)来保证多线程程序的正确性,以及一些编译器和处理器级别的优化技术对内存一致性的影响。 此外,《a primer on memory consistency pdf》还对一些实际应用中的内存一致性问题进行了讨论,如并发数据结构、并行算法等。通过这些案例,读者可以更好地理解内存一致性问题的实际应用和解决方法。 总之,《a primer on memory consistency pdf》是一本很好的入门指南,通过简明扼要地介绍内存一致性问题及其解决方案,读者可以对多线程编程中的内存一致性有一个较为全面的了解,并且可以在实际应用中进行正确的处理。 ### 回答2: 《内存一致性基础中文版PDF》是一本介绍内存一致性的基础知识的文档。内存一致性是指对于多个并发执行的进程或线程,它们观察到操作内存的结果是一致的。在多核处理器系统中,每个处理器都有自己的缓存,如果缓存数据不一致,就会导致内存不一致性的问题。 这份文档首先介绍了内存一致性的背景和重要性。在多核处理器和并发编程的背景下,内存一致性变得尤为重要。接着,文档详细介绍了不同的内存一致性模型,包括顺序一致性、弱一致性和松散一致性等。每种模型都有自己的特点和适用场景,了解这些模型能够帮助程序员编写高效且正确的并发程序。 文档还介绍了一些实现内存一致性的技术,如缓存一致性协议和内存屏障等。了解这些技术可以帮助开发者更好地理解内存一致性的原理和实现机制。此外,文档还提供了一些实际应用的示例和案例,让读者更好地理解内存一致性在实际开发中的应用和挑战。 《内存一致性基础中文版PDF》是一份权威且易懂的资料,适合对内存一致性感兴趣的学生、程序员和系统工程师阅读。它可以帮助读者建立起对内存一致性概念的全面和深入的理解,为他们编写高效且正确的并发程序提供指导和帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值