根据以下资源,在C ++(特别的Visual C ++)范围的静态变量初始化不是线程安全。但是,全局静态变量是安全的。

线程安全静态变量而不mutexing?

http://blogs.msdn.com/oldnewthing/存档/ 2004/03/08 / 85901.aspx

那么,是在用代码静态成员变量线程安全?

class TestClass
{
public:
   static MyClass m_instance;
}

Myclass TestClass::m_instance;

提前感谢!

有帮助吗?

解决方案

这是更多的功能范围的静态变量与所有其他类型的静态变量的问题,而不是作用域与全局变量。

所有非函数作用域的静态变量main()之前被构造,而只存在一个活动线程。函数作用域的静态变量被构造在第一时间其包含函数被调用。该标准是对如何当函数被调用的多线程功能级静态构造的问题保持沉默。然而,每一个我曾与实现使用周围的构造的锁(有两次检查标志),以保证线程安全。

其他提示

是(*)。当全球静态初始化,只有一个线程四周,所有构造函数的调用就可以了。这不是功能的静态真实,虽然。

(*),可以使可能全球静态不是线程安全的在一些构造函数创建线程,并在这些线程调度一些初始化阶段。在这种情况下通常的线程安全规则适用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top