C语言 内存顺序(一致性模型)和 C99



我看到 C11 在 memory_order ( <GCC_SOURCE>/gcc/ginclude/stdatomic.h ,GCC 内存模型维基页面,C11 维基百科条目)。

我很想知道 C99 中的默认行为是什么? 默认情况下是否假定顺序一致性模型?

未定义。 多线程编程超出了早期 C 标准的范围。 如果你正在编写多线程C99程序,你依赖于编译器做出的承诺,而不是C标准。

内存一致性模型是为_Atomic数据类型及其操作定义的。原子学的整个概念仅在 C11 中引入,因此这种内存排序约束根本不适用。

C11之前唯一与原子相互作用的特征是信号。C99 只有sig_atomic_t,可以让您在信号处理程序和程序的其余部分之间传递信息。在这里,术语"原子"应从主要意义上理解,一种保证被完整读取或写入的数据类型,而不是像更广泛的数据类型那样部分发生。

在 C11 中,某些类型的 _Atomic 数据类型也保证在信号处理程序中表现良好。因此,在这种情况下,即使没有线程,您也可能对memory_order感兴趣。

最新更新