我看到C11在memory_order(<GCC_SOURCE>/gcc/ginclude/stdatomic.h
附近有其他功能,
GCC Memory Model Wiki page,C11 Wikipedia entry)。
我很想知道C99中的默认行为是什么?它是否默认采用顺序一致性模型?
答案 0 :(得分:3)
未定义。多线程编程超出了早期C标准的范围。如果您正在编写多线程C99程序,那么您依赖于编译器的承诺,而不是C标准。
答案 1 :(得分:2)
为_Atomic
数据类型及其操作定义了内存一致性模型。原子论的这个概念仅在C11中引入,因此这种记忆排序约束根本不适用。
与原子相互作用的唯一前C11特征是信号。 C99只有sig_atomic_t
,可以让您在信号处理程序和程序的其余部分之间传递信息。这里的术语是&#34; atomic&#34;从主要意义上讲,应理解为保证完整读取或写入的数据类型,而不是部分更广泛的数据类型。
在C11中,某些类型的_Atomic
数据类型也保证在信号处理程序中表现良好。因此,即使没有线程,您也可能对memory_order
感兴趣。