C++静态成员变量初始化是线程安全的吗?

2024-04-01

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

没有互斥的线程安全静态变量? https://stackoverflow.com/questions/1052168/thread-safe-static-variables-without-mutexing

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

那么,下面带有静态成员变量的代码是线程安全的吗?

class TestClass
{
public:
   static MyClass m_instance;
}

Myclass TestClass::m_instance;

提前致谢!


这更多的是函数作用域的静态变量与其他类型的静态变量的问题,而不是作用域的静态变量与全局变量的问题。

所有非函数作用域静态变量都在 main() 之前构造,而只有一个活动线程。函数作用域静态变量是在第一次调用其包含函数时构造的。该标准没有提及当在多个线程上调用函数时如何构造函数级静态的问题。然而,我使用过的每个实现都在构造函数周围使用锁(带有两次检查标志)来保证线程安全。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++静态成员变量初始化是线程安全的吗? 的相关文章

随机推荐