我正在开源环境,我的产品可以在任何硬件中使用。我特别致力于日志记录并使其成为原子我需要使用checkandexchange aka testandset类函数。并且由于这个程序是在c上编写的并且它在linux OS上运行,我计划使用gcc原子buildins。
如果不支持这些构建的宏会抛出错误还是会导致运行时问题?
我是一名纯粹的程序员,除了编码之外我对其他任何事情都知之甚少。我能够从手册中理解的是,这些功能正是我正在寻找的。
由于这是一个开源项目,我担心打破它(构建失败比运行时问题更好)
我知道我可以使用linux内核函数但是它不提供比较和交换选项。
答案 0 :(得分:2)
如果特定平台上没有提供特定的内置,则gcc会通过调用函数来替换它。然后,您必须提供此功能,否则您将收到链接时错误。
使用C11的<stdatomic.h>
和支持它的编译器版本可以避免这个问题:如果不支持指令,它将被模拟。