1

我有以下代码 C++ 伪代码

class A
{
 private:
 B s_staticvar;

 public:
 static void doSomething()
 {
 }
}

许多线程可以调用doSomething()。所有线程只读取 s_staticvar 并且不修改它们。我的问题是我们必须在阅读静态变量之前锁定它吗?

对象 B 的非原子读取会导致同步问题吗?

4

1 回答 1

4

您可以安全地从多个线程中读取数据。不需要锁定。这些线程甚至不会注意到对方。只有您需要确保在其他线程启动之前完全准备好您的变量。

在多核/多处理器环境中,您的数据的多个副本可能会出现在不同处理器的缓存中。只要它们都相同,这不是问题。

于 2012-09-07T17:42:20.667 回答