这是LWG第1479期的补充,它正在解决关于C++ 11的最后一刻评论.
此更改的基本原理是C语言兼容性(C11线程库在stdatomic.h中具有相同名称的函数atomic_thread_fence).
据我所知,C和C++原子库可以共存的计划总是:兼容性的其他示例是std :: atomic的C兼容类型别名,例如atomic_intC兼容性宏ATOMIC_VAR_INIT
atomic_thread_fence建立非原子和宽松原子访问的内存同步顺序。
并发性,尤其是宽松内存并发性,是一个众所周知的微妙且容易出错的领域,因此验证此类优化非常有意义。参考文献1。
对于这样的事情被广泛使用CompCertTSO。
CompCertTSO 是一个从 ClightTSO 生成 x86 汇编代码的编译器,ClightTSO 是 C 编程语言的一个大子集,通过用于线程管理和同步的并发原语以及基于 x86-TSO 模型的 TSO 宽松内存模型进行了增强。
因此,出于验证、优化和测试目的,该函数最好具有“C”链接。