1. __sync_bool_compare_and_swap系列是gcc最早内置的;
2. __atomic_compare_exchange_n系列是新版gcc内置的,支持6种memory order;
3. std::atomic之类的是stl的封装;
4. 6种mem order,https://www.zhihu.com/question/24301047里讲得不错,概括下:
memory_order_seq_cst最严,memory_order_relaxed最松,通常是用acquire(load时)/release(store时)模式,在该大模式下:
a. 通常是读用memory_order_acquire,写用memory_order_release;
b. 如果只是针对单个变量且该变量没有依赖的变量,acquire可以弱化为consume;
c. 如果不想区分什么单变量多变量或读写状态,简单点统一用memory_order_acq_rel。