clang ++是否对本地静态变量进行线程安全初始化?

时间:2011-09-14 19:44:11

标签: c++ clang clang++

clang ++是否对本地静态变量进行线程安全初始化?

GCC会这样做,除非你用误导性名称-fno-threadsafe-statics将其关闭。 我正在使用Apple clang 2.0版(标签/ Apple / clang-139)(基于LLVM 2.9svn)。

2 个答案:

答案 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会修复其代码...