有可能做这样的事情吗?
...
class test{
int i;
public:
test(int k):i(k){};
void my(){
cout<<i;
}
}
atomic<test> kk(0);
kk.test();
...
如果这不可能,那么如何调用函数,使其成为原子的?
最佳答案
std::atomic
的工作方式是使用处理器提供的某些指令。这些指令仅适用于某些大小的整数(不同的处理器对可以做什么和不可以做什么有不同的限制和规则,在某些体系结构中,处理器体系结构甚至可能需要使用互斥锁或类似功能来简单地实现std :: atomic)。
还要注意,std::atomic
的目的是用来确保该值在多个处理器核心或多个处理器之间进行原子更新,这通常不是您想要/不能对较大的数据结构执行的操作。
要在其他数据结构上实现原子操作,您将必须使用互斥锁或类似的构造来确保以“线程原子”方式(不同于“处理器原子”)完成处理。
关于c++ - std::atomic是否有可能使类的复杂成员函数成为atomic?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17023052/