什么是并发的C 03内存模型?

C 03中并发的内存模型是什么?

(而且,C 11是否改变了内存模型以更好地支持并发?)

C存储器模型是关于C代码读/写物理存储器的时间和原因的规范。

直到下一个C标准,C存储器模型与C相同。在C 0x标准中,期望包括用于多线程的适当的存储器模型(参见here),并且它将是下一版本的C标准,C1X。当前的一个是初步的:

>它只指定当前程序可观察的内存操作的行为。
>当多个进程访问同一内存时(没有共享内存或进程的概念),它不会说明任何关于并发内存访问的内容。
>当多个线程访问相同的内存时(没有线程的概念),它不会对并发内存访问说什么。
>它不提供指定存储器访问的排序(编译器优化包括代码运动和最近的处理器重新排序访问,两者都可以破坏模式,例如双重检查的初始化)。

所以,当前的状态是:C内存操作只有当你有1个进程,它的主线程和不写代码,这取决于可变读/写的特定顺序,这就是指定。实质上,这意味着除了传统的hello世界程序,你被拧了。

当然,你会提示添加“它今天在我的机器上工作,你不可能是正确的”。正确的句子是“它今天在我的机器上这种特定的硬件,操作系统(线程库)和编译器谁知道足够的相互执行某些工作,但可能会在某些时候破裂”的组合。

好吧,这有点苛刻,但地狱,even Herb Sutter acknowledges that(只是读介绍),他正在谈论的所有2007年前版本最无处不在的C / C工具链之一…

C标准委员会试图提出一些问题,解决所有这些问题,同时仍然比Java的内存模型约束更少(因此更好的性能)。

Hans Boehm收集了here一些关于这个问题的论文,包括学术界和C委员会。

http://stackoverflow.com/questions/220752/what-is-the-c03-memory-model-for-concurrency

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:什么是并发的C 03内存模型?