c – VC2010是静态初始化线程安全吗?

c – VC2010是静态初始化线程安全吗?,第1张

概述我一直在寻找SO和MSDN,以解答这个问题,但似乎找不到一个明确和最终的答案… 我知道它在C11标准中,目前的GCC版本是这样做的,但VC2010当前是否保证本地静态变量初始化线程安全? 即:VC2010线程安全吗? static S& getInstance() { static S instance; return instance; } …如 我一直在寻找SO和MSDN,以解答这个问题,但似乎找不到一个明确和最终的答案…

我知道它在C11标准中,目前的GCC版本是这样做的,但VC2010当前是否保证本地静态变量初始化的线程安全?

即:VC2010线程安全吗?

static S& getInstance()    {        static S instance;        return instance;    }

…如果没有,目前最好的做法是用VC2010在C中实现线程安全的单例实现?

编辑:正如Chris Betti的回答所指出的,VC2010并没有实现本地静态变量init的线程安全性.

解决方法 从Visual Studio 2010的 documentation on Static:

Assigning a value to a static local variable in a multithreaded application is not thread safe and we do not recommend it as a programming practice.

你的问题的第二部分是some good existing answers.

2015年11月22日更新:

其他人已经验证,特别是静态初始化不是线程安全的(见评论和其他答案).

VS2015用户静音:

you may want to add that VS2015 finally gets it right: 07002 (“Magic statics”)

总结

以上是内存溢出为你收集整理的c – VC2010是静态初始化线程安全吗?全部内容,希望文章能够帮你解决c – VC2010是静态初始化线程安全吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1248101.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存