atomic

std.sync.atomic

fun load

pub fun load(ptr: *i64) i64;

具有顺序一致性的原子 64 位加载

ptr:要加载的地址 ret:加载的值

fun store

pub fun store(ptr: *i64, v: i64);

具有顺序一致性的原子 64 位存储

ptr:要存储的地址 v:要存储的值

fun cas

pub fun cas(ptr: *i64, expected: *i64, desired: i64) bool;

原子比较并交换(compare-and-swap) 如果 *ptr == *expected,则存储 desired 并返回 true。 否则,将实际值写入 *expected 并返回 false。

ptr:原子变量的地址 expected:指向期望值的指针(失败时会被更新) desired:成功时要存储的值 ret:如果交换成功则为 true

fun fetch_add

pub fun fetch_add(ptr: *i64, v: i64) i64;

原子获取并相加。返回旧值

ptr:原子变量的地址 v:要相加的值 ret:先前的值

fun fetch_sub

pub fun fetch_sub(ptr: *i64, v: i64) i64;

原子获取并相减。返回旧值

ptr:原子变量的地址 v:要相减的值 ret:先前的值

fun exchange

pub fun exchange(ptr: *i64, v: i64) i64;

原子交换。返回旧值

ptr:原子变量的地址 v:新值 ret:先前的值

fun fence

pub fun fence();

全内存屏障(full memory barrier)

fun spin_hint

pub fun spin_hint();

用于自旋循环的 CPU 让步提示(yield hint)