我可以在Linux驱动程序中使用C11中的<stdatomic.h>,还是必须使用内存屏障的Linux函数?</stdatomic.h>

时间:2014-02-01 12:01:20

标签: c gcc linux-kernel kernel driver

我可以在Linux驱动程序(内核空间)中使用#include <stdatomic.h>atomic_thread_fence()来自C11的memory_order,还是必须使用内存屏障的Linux函数:

使用:

  • Linux-kernel 2.6.18或更高版本
  • GCC 4.7.2或更高版本

2 个答案:

答案 0 :(得分:6)

如果您正在编写内核代码,则应该在C中执行此操作,并使用当前内核所需的C版本(发送gcc)执行此操作。如果你想让它被主流接受(或者把它写成接受它),你应该使用Linux功能。您还会发现它们在没有意外惊喜的情况下工作,您将获得更好的调试帮助。

总结:使用linux函数。

答案 1 :(得分:1)

编辑: 似乎没有用。 有或没有没有任何区别。 驱动程序可以编译,但lib将回退到普通整数或NOP

似乎有效。

atomic_store()atomic_load()提供了内核模块驱动程序和userland程序之间所需的线程同步。 不确定的是,如果采用回退方法,我的意思是,编译器使用标准整数和常规汇编指令。

随意查看source codes  在功能: intelfreq.c / Core_Cycle()corefreqd.c / Core_Cycle()