c++ - 静态对象的同步

标签 c++ multithreading static thread-safety

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

class A
{
 private:
 B s_staticvar;

 public:
 static void doSomething()
 {
 }
}

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

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

最佳答案

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

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

关于c++ - 静态对象的同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12322890/

相关文章:

Python:为什么从线程调用的 `sys.exit(msg)` 不将 `msg` 打印到 stderr?

.net - 必须在 .net 中一次访问一个静态方法/类/变量吗?

c++ - 在 C/C++ 中分配内存失败

由 小码哥发布于 2019-11-08 09:00:00 c++design: avoid iterating over types with an existing class hierarchy

java - 重新分配多个线程使用的对象

java - 将内部类更改为静态时编译失败

javascript - 我如何将静态函数的值发送到另一个对象?

c++ - 段错误 C++ Cuda

java - 如何使用java或c计算3^1002的数字之和?

c - 使用 argv 元素时出现问题