并行编程中为避免线程之间的访问冲突,往往需要添加锁来进行同步。
而所谓的原子(atomic)操作就是不会被其他线程打断的操作。
Any time two threads operate on a shared variable concurrently, and one of those operations performs a write, both threads must use atomic operations.
之所以会被打断,是由操作系统调度决定的。 很有可能读了数据计算时,原始数据已经被其他线程改变了。 为避免这种情况,就要声明是原子操作或加锁。 否则结果是不可预测的(undefined behaviour)。
#include <atomic>
atomic<T>
用于声明T类型的原子变量基本原子操作如下
=x |
read the value of x |
x= |
write the value of x, and return it |
x.fetch_and_store(y) |
do x=y and return the old value of x |
x.fetch_and_add(y) |
do x+=y and return the old value of x |
x.compare_and_swap(y,z) |
if x equals z, then do x=y. In either case, return old value of x |