我有以下代码C ++伪代码
class A
{
private:
B s_staticvar;
public:
static void doSomething()
{
}
}
许多线程可以调用doSomething()。所有线程只读取s_staticvar&不修改它们。 我的问题是我们必须在读取之前锁定静态变量吗?
对象B的非原子读取是否会导致同步问题?
答案 0 :(得分:4)
您可以安全地从多个线程中读取数据。不需要锁定。这些线程甚至不会互相注意。只有您需要确保在其他线程启动之前完全准备好变量。
在多核/多处理器环境中,可能会在不同处理器的缓存中出现多个数据副本。只要它们完全相同,这不是问题。