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

我一直在寻找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&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...