c++ - std::atomic 是否有可能使类的复杂成员函数成为原子?

标签 c++ multithreading atomic

有没有可能做这样的事情?

...
class test{
int i;
public:
      test(int k):i(k){};
      void my(){
         cout<<i;
      }
}
atomic<test> kk(0);
kk.test();
...

如果这不可能,那么如何进行函数调用以使其成为原子的?

最佳答案

std::atomic 的工作方式是它使用处理器提供的某些指令。这些指令仅适用于特定大小的整数(不同的处理器对你能做什么和不能做什么有不同的限制和规则,在某些架构中,处理器架构甚至可能需要使用互斥锁或类似功能来简单地实现标准::原子)。

另请注意,std::atomic 的目的是用于确保值在多个处理器内核或多个处理器之间以原子方式更新,这通常不是您想要/可以做的更大的数据结构。

要在其他数据结构上实现原子操作,您将不得不使用互斥锁或类似结构来确保处理以“线程原子”方式(不同于“处理器原子”)完成。

关于c++ - std::atomic 是否有可能使类的复杂成员函数成为原子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17023052/

相关文章:

c++ - 如果 volatile 是不必要的,为什么 std::atomic 方法提供 volatile 重载?

c++ - 如果 8 字节由不同线程写入,则现代 intel x86 上的 8 字节读取是否能保证正常?

c++ - 如何获取 Eigen::MatrixXd 的行数和列数?

带有 lambda 表达式的 constexpr 的 C++ 用法

Java 同步和可重入锁定

python - 列表是线程安全的吗?

linux - 如何检测连续按下按钮的频率?

java - 如何在 java 中一起提供 2 个变量的原子读/写?

c++ - OpenGL C++-太阳系

C++ 继承和模板