静态对象的同步

时间:2012-09-07 17:39:42

标签: c++ multithreading static thread-safety

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

class A
{
 private:
 B s_staticvar;

 public:
 static void doSomething()
 {
 }
}

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

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

1 个答案:

答案 0 :(得分:4)

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

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