为什么std :: atomic_thread_fence有“C”链接?

时间:2017-02-01 14:47:59

标签: c++ c++11 atomic

我不知道为什么这个函数需要“C”而不是“C ++”链接。

2 个答案:

答案 0 :(得分:5)

这是由LWG issue 1479添加的,它正在解决关于C ++ 11的最后一刻评论。

此更改的基本原理是C语言兼容性(C11线程库在stdatomic.h中具有相同名称的函数atomic_thread_fence。)

据我所知,C和C ++原子库总是可以共存的计划:兼容性的其他示例是std :: atomic的C兼容类型别名,例如atomic_int和C兼容性宏ATOMIC_VAR_INIT

答案 1 :(得分:0)

atomic_thread_fence建立非原子和放松原子访问的内存同步排序 并发,特别是宽松内存并发,是一个众所周知的问题 微妙且容易出错的域,以及验证这种优化 非常感兴趣。 Ref1
对于这样的事情被广泛使用CompCertTSO CompCertTSO是一个编译器,它从ClightTSO生成x86汇编代码,ClightTSO是C编程语言的一个大子集,增强了用于线程管理和同步的并发原语,以及基于x86-TSO模型的TSO宽松内存模型。

因此,为了验证,优化和测试目的,这个功能需要具有" C"键。