比如我有这个类:
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/