我看到C11有关于memory_order的其他特性(<GCC_SOURCE>/gcc/ginclude/stdatomic.h、GCC记忆模型Wiki页面、C11维基百科条目 )。
我很想知道C99中的默认行为是什么?默认情况下,它是否假定顺序一致性模型?
发布于 2014-12-04 20:00:33
还没有定义。多线程编程超出了早期C标准的范围.如果您正在编写多线程C99程序,那么您所依赖的是编译器做出的承诺,而不是C标准。
发布于 2014-12-04 21:36:36
为_Atomic数据类型及其上的操作定义了内存一致性模型。原子的整个概念只是在C11中引入的,所以这样的内存排序约束根本不适用。
与atomics交互的唯一的前C11功能是信号。C99的sig_atomic_t只允许您在信号处理程序和程序的其余部分之间通信信息。在这里,“原子”一词是从基本意义上理解的,这是一种数据类型,保证完整地读或写,而不是部分地读或写,因为它可能发生在更广泛的数据类型中。
在C11中,某些类型的_Atomic数据类型也保证在信号处理程序中表现良好。因此,即使在没有线程的情况下,您也可能对memory_order感兴趣。
https://stackoverflow.com/questions/27301371
复制相似问题