原子性:指的是事务的不可分割性,即一个事务的所有操作要么不间断地全部被执行,要么一个也没有执行。
atomic可以使得某个变量具有原子性,使得在多线程中对某一变量的简单操作可以被正确执行,比如下方的a++这个操作,看着只是一步,但其实在汇编中是多步执行的,如果在多个线程中同时对某个变量做出改变,如++等,加锁的话开销会大一点,不加锁的话又会出异常,这时可以用atomic声明该变量为原子类型,虽然只能进行简单的操作,包括:++,--,+=,*=,/=等,但开销小。
int a;
a++;
//声明变量b为原子类型的整形
atomic<int> b;
atomic没有拷贝构造函数,不能用其他的atomic类型的变量赋值,但可以通过它自带的load函数进行拷贝,也可以通过store进行赋值。
atomic<int> ato = 2;
//atomic<int> ato1 = ato; 错的
atomic<int> ato2(ato.load()); //对的
ato.store(10);