Function core::arch::x86_64::cmpxchg16b

1.67.0 · source ·
pub unsafe fn cmpxchg16b(
    dst: *mut u128,
    old: u128,
    new: u128,
    success: Ordering,
    failure: Ordering
) -> u128
Available on x86-64 and target feature cmpxchg16b only.
Expand description

自动比较和交换 16 字节 (128 位) 的数据。

此内部函数对应于 x86_64 处理器上的 cmpxchg16b 指令。 它执行原子比较和交换,如果内存中的当前值等于 old,则将 ptr 的内存位置更新为 val

返回值

此函数在内存位置返回前一个值。如果等于 old,则内存已更新为 new

内存顺序

此原子操作与 AtomicUsize::compare_exchange 具有相同的内存排序语义,仅对 16 字节内存进行操作,而不仅仅是一个指针。

故障顺序必须是 Ordering::SeqCstOrdering::AcquireOrdering::Relaxed

有关此处的内存顺序的更多信息,请参见标准库中其他 Atomic* 类型的 compare_exchange 文档。

Unsafety

此方法是不安全的,因为它使用裸指针,并且将尝试读取并可能在指针处写入内存。 指针还必须在 16 字节边界上对齐。

此方法还要求 cmpxchg16b CPU 特性在运行时可用,才能正常工作。 如果运行二进制文件的 CPU 实际上不支持 cmpxchg16b,并且程序输入了最终会到达该函数的执行路径,则该行为未定义。