叮当声吗++局部静态变量的线程安全初始化?
clang++ 是否对局部静态变量进行线程安全初始化?
GCC 会这样做,除非您使用误导性命名的 -fno-threadsafe-statics
将其关闭。 我正在使用 Apple clang 版本 2.0 (tags/Apple/clang-139)(基于 LLVM 2.9svn)。
Does clang++ do threadsafe initialisation of local static variables?
GCC does, unless you turn it off with the misleadingly named -fno-threadsafe-statics
.
I'm using Apple clang version 2.0 (tags/Apple/clang-139) (based on LLVM 2.9svn).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
是的,与 GCC 相同(因此也可以使用
-fno-threadsafe-statics
关闭)Yes, same as with GCC (so can also be turned off with
-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(导致当使用 libcppabi 时,Qt 以不同的方式实现这一点)。
我希望让更多的人意识到这一点,有一天苹果会修复他们的代码......
Yes, although Apple's libcppabi implements this in a suboptimal way: with a global mutex which harms performance if many threads are using many local statics.
Source code:
http://www.opensource.apple.com/source/libcppabi/libcppabi-26/src/cxa_guard.cxx
Bug report:
https://bugreports.qt.io/browse/QTBUG-33967 (which led Qt to implement this differently when libcppabi is used).
I hope making more people aware of this will result in Apple fixing their code one day...