如果底层硬件或操作系统不支持gcc提供的原子内置,我们会得到编译错误吗?

时间:2016-04-15 14:36:20

标签: c gcc synchronization atomic

我正在开源环境,我的产品可以在任何硬件中使用。我特别致力于日志记录并使其成为原子我需要使用checkandexchange aka testandset类函数。并且由于这个程序是在c上编写的并且它在linux OS上运行,我计划使用gcc原子buildins。

如果不支持这些构建的宏会抛出错误还是会导致运行时问题?

我是一名纯粹的程序员,除了编码之外我对其他任何事情都知之甚少。我能够从手册中理解的是,这些功能正是我正在寻找的。

由于这是一个开源项目,我担心打破它(构建失败比运行时问题更好)

我知道我可以使用linux内核函数但是它不提供比较和交换选项。

1 个答案:

答案 0 :(得分:2)

如果特定平台上没有提供特定的内置,则gcc会通过调用函数来替换它。然后,您必须提供此功能,否则您将收到链接时错误。

使用C11的<stdatomic.h>和支持它的编译器版本可以避免这个问题:如果不支持指令,它将被模拟。