静态成员变量的 C++ 线程安全

标签 c++ multithreading

比如我有这个类:

class Example
{
public: 
    static int m_test;
}

我有线程 A 和 B 都使用这个静态成员变量。这个成员变量线程在集线器下面的某个地方安全吗?

我假设不是,因为它是静态分配的,因此两个线程将访问相同的内存位置,可能导​​致冲突。这是正确的还是有一些隐藏的机制使这个静态成员线程安全?

最佳答案

不,它不是线程安全的,因为没有内置机制来避免数据竞争。

static std::atomic<int> m_test;会的。

请注意,您还有 thread_local作为存储持续时间 - 在这种情况下对你没有用 - 但如果你有它而不是 static然后每个线程都会得到自己的 m_test .

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

相关文章:

c++ - -fsanitize=address 使用 clang++ 与 g++ 的不同输出

c++ - 有没有办法让 C++ 函数采用具有相同成员的两种不同类型?

c# - 在线程执行过程中更新UI C# android

java - Thread类的方法与Thread.currentThread()所使用的方法之间的区别?

android - android SyncAdapter 中的异步 Volley 调用

C++ 数组到 vector 问题

c++ - 在 C++ 中重载 >>

c++ - 多边形轮廓上的边并不总是正确的

iphone - 我可以选择访问应用程序中运行的所有线程吗?

java - 在多线程程序线程中执行一个类的静态方法是否安全?