clang++ 是否对局部静态变量进行线程安全初始化?
GCC 确实如此,除非您使用误导性命名的-fno-threadsafe-statics
. 我正在使用 Apple clang 2.0 版(tags/Apple/clang-139)(基于 LLVM 2.9svn)。
是的,与 GCC 相同(因此也可以使用 关闭-fno-threadsafe-statics
)
是的,尽管 Apple 的 libcppabi 以次优的方式实现了这一点:使用全局互斥锁,如果许多线程使用许多本地静态变量,则会损害性能。
源代码: http ://www.opensource.apple.com/source/libcppabi/libcppabi-26/src/cxa_guard.cxx
错误报告: https : //bugreports.qt.io/browse/QTBUG-33967(这导致 Qt 在使用 libcppabi 时以不同方式实现此功能)。
我希望让更多的人意识到这一点,这将导致苹果有一天会修复他们的代码......