是否有可能做出这样的事情?
...
class test{
int i;
public:
test(int k):i(k){};
void my(){
cout<<i;
}
}
atomic<test> kk(0);
kk.test();
...
如果这是不可能的,那么如何使函数的调用,这样它会是原子?
是否有可能做出这样的事情?
...
class test{
int i;
public:
test(int k):i(k){};
void my(){
cout<<i;
}
}
atomic<test> kk(0);
kk.test();
...
如果这是不可能的,那么如何使函数的调用,这样它会是原子?
该方法std::atomic
的作品是,它使用处理器提供一定的指导。 这些指令只适用于某些大小的整数(不同的处理器对你能做和不能做什么不同的限制和规则,以及在某些架构,处理器架构甚至可能需要使用一个互斥体或类似的功能仅仅实现的std ::原子)。
还需要注意的是目的std::atomic
被用来确保该值在多个处理器核心或多个处理器一起自动更新,这通常不是你想要的/可与大型的数据结构做。
为了实现对其他数据结构的原子操作,你将不得不使用互斥或类似的结构,以确保处理是在“线程原子”的方式完成(不同于“处理器核”)。
您可以创建std::atomic
持有非数字对象的对象。 主要的限制是所包含的类型必须是平凡能够复制; 严格意义上(因为这是它是如何实现的),这意味着,复制memcpy
是好的,并与比较memcmp
是有意义的。 但是,它不会让你调用存储对象的成员函数。 你必须复制存储的对象,请更新,然后将结果复制回原子对象。