我一直在寻找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”)
原文地址:https://www.jb51.cc/c/114380.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。