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

Does clang++ do threadsafe initialisation of local static variables?

本文关键字:线程 安全 初始化 变量 是否 局部 静态 clang++      更新时间:2023-10-16

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时以不同的方式实现此功能)。

我希望让更多的人意识到这一点,终有一天苹果会修复他们的代码…