我有如下代码C++伪代码
class A
{
private:
B s_staticvar;
public:
static void doSomething()
{
}
}
许多线程可以调用 doSomething()。所有线程只读取 s_staticvar 并且不修改它们。 我的问题是我们是否必须在读取静态变量之前锁定它?
对象 B 的非原子读取会导致同步问题吗?
最佳答案
您可以安全地从多个线程读取数据。不需要锁定。这些线程甚至不会注意到彼此。只是您需要确保在其他线程启动之前充分准备好您的变量。
在多核/多处理器环境中,您的数据的多个拷贝可能会出现在不同处理器的缓存中。只要它们都相同,这不是问题。
关于c++ - 静态对象的同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12322890/