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

标签 c++ multithreading static member-variables

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

Thread-safe static variables without mutexing?

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

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

class TestClass
{
public:
   static MyClass m_instance;
}

Myclass TestClass::m_instance;

提前致谢!

最佳答案

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

所有非函数作用域的静态变量都是在main()之前构造的,而只有一个事件线程。函数范围的静态变量是在第一次调用它们的包含函数时构造的。该标准对在多个线程上调用函数时如何构造函数级静态变量的问题保持沉默。但是,我使用过的每个实现都使用构造函数周围的锁(带有两次检查标志)来保证线程安全。

关于c++ - C++ 静态成员变量初始化线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1962880/

相关文章:

c++ - std::vector 的性能差是因为没有调用 realloc 的对数次数吗?

java - 为什么空闲 Java 线程显示高 CPU 使用率?

c++ - 线程彼此减慢

html - 如何使页面元素静态/悬停在它下面滚动的东西上方(我已经有一个静态背景)

java - 为什么java中静态成员的顺序很重要?

c++ - OpenCV K 均值 (kmeans2)

c++ - CFile::osNoBuffer 标志在写入文件时导致异常

c++ - 具有嵌套结构/类的 POD 性

c# - 在 WCF 中使用任务构建异步操作契约(Contract)的正确方法

c++ - 具有静态存储的变量地址模板