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