为什么std :: atomic_thread_fence有"C"链接?

Wal*_*ltK 5 c++ atomic c++11

我不知道为什么这个函数需要"C"而不是"C++"链接.

Cub*_*bbi 5

这是LWG第1479期的补充,它正在解决关于C++ 11的最后一刻评论.

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

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

  • @WaltK完全像`sin`或`printf`. (3认同)

Ram*_*ama 0

atomic_thread_fence建立非原子和宽松原子访问的内存同步顺序。
并发性,尤其是宽松内存并发性,是一个众所周知的微妙且容易出错的领域,因此验证此类优化非常有意义。参考文献1
对于这样的事情被广泛使用CompCertTSO
CompCertTSO 是一个从 ClightTSO 生成 x86 汇编代码的编译器,ClightTSO 是 C 编程语言的一个大子集,通过用于线程管理和同步的并发原语以及基于 x86-TSO 模型的 TSO 宽松内存模型进行了增强。

因此,出于验证、优化和测试目的,该函数最好具有“C”链接。