Atomic(原子操作与原子整数)
前置知识
happens-before:
- 用来描述两个操作的内存可见性 如果操作 X happens-before 操作 Y,那么 X 的结果对于 Y 可见
六种内存序:
typedef enum memory_order { memory_order_relaxed, // relaxed不对执行顺序做保证 memory_order_consume, // consume暂时不鼓励使用 memory_order_consume memory_order_acquire, // acquire本线程中,所有后续的读操作必须在本条原子操作完成后执行 memory_order_release, // release本线程中,所有之前的写操作完成后才能执行本条原子操作 memory_order_acq_rel, // acquire/release同时包含memory_order_acquire 和 memory_order_release memory_order_seq_cst // sequentially consistent保证指令的顺序一致执行,不打开编译器优化指令,按照正常的指令序执行 } memory_order;
gcc的原子操作__sync_(不推荐):使用这些原子操作gcc编译时要加上选项 -march=cpu-type
bool __sync_bool_compare_and_swap (type *ptr, type oldval, type newval, ...)
比较*ptr与oldval的值,如果相等则将newval更新到*ptr并返回truetype __sync_val_compare_and_swap (type *ptr, type oldval, type newval, ...)
比较*ptr与oldval的值,如果相等则将newval更新到*ptr并返回操作之前*ptr的值</