【发布时间】:2014-12-04 18:33:01
【问题描述】:
我看到 C11 有关于 memory_order 的附加功能 (<GCC_SOURCE>/gcc/ginclude/stdatomic.h,
GCC Memory Model Wiki page, C11 Wikipedia entry)。
我很想知道 C99 中的默认行为是什么?是否默认采用顺序一致性模型?
【问题讨论】:
标签: c gcc c99 c11 consistency
我看到 C11 有关于 memory_order 的附加功能 (<GCC_SOURCE>/gcc/ginclude/stdatomic.h,
GCC Memory Model Wiki page, C11 Wikipedia entry)。
我很想知道 C99 中的默认行为是什么?是否默认采用顺序一致性模型?
【问题讨论】:
标签: c gcc c99 c11 consistency
未定义。多线程编程超出了早期 C 标准的范围。如果您正在编写多线程 C99 程序,则您依赖的是编译器做出的承诺,而不是 C 标准。
【讨论】:
内存一致性模型是为_Atomic 数据类型和对它们的操作定义的。整个原子概念仅在 C11 中引入,因此这种内存排序约束根本不适用。
唯一与原子交互的 pre-C11 功能是信号。 C99 只有sig_atomic_t 可以让您在信号处理程序和程序的其余部分之间传递信息。此处的“原子”一词应从主要意义上理解,即一种保证可以整体读取或写入的数据类型,而不是部分数据类型,因为它可能会出现在更广泛的数据类型中。
在 C11 中,某些类型的 _Atomic 数据类型也保证在信号处理程序中表现良好。因此,即使没有线程,您也可能对memory_order 感兴趣。
【讨论】: