C11禁止这种行为(显然是一种凭空而存)吗?

时间:2015-01-24 01:21:15

标签: c linux multithreading gcc c11

行为是否提到了C11禁止的LWN article “Betrayed by a bitfield”?假设spinlock_t是一种类型,指的是只能通过其成员上的C11原子基元访问的结构(实际上它使用Linux(内核)内存屏障,但假设它没有这样它由于使用特定于实现的接口,因此未定义。除了标题中的问题,它是一个“凭空”的例子吗?。

提前致谢。

1 个答案:

答案 0 :(得分:2)

不,因为它在这里提出它在C11中是不被禁止的。 C11仅为_Atomic类型提供原子性保证,即在语言中声明为原子的类型。由于内核使用自己的本土原语来确保你自己的原子性,C11在这里无法帮助你。

与本地汇编程序黑客相比,C11 _Atomic更改的内容是_Atomic可能会更改数据类型的大小和对齐属性。在给定的示例中,它可以例如强制在下一个字边界的边缘上使用尾随位字段。