Function core::arch::x86_64::cmpxchg16b[][src]

pub unsafe fn cmpxchg16b(
    dst: *mut u128,
    old: u128,
    new: u128,
    success: Ordering,
    failure: Ordering
) -> u128
🔬 This is a nightly-only experimental API. (stdsimd #48556)
This is supported on x86-64 and target feature cmpxchg16b only.
Expand description

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

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

返回值

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

内存顺序

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

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

Unsafety

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

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

success 的顺序也必须大于或等于 failure,否则此函数调用是未定义的。 有关更多信息,请参见 Atomic* 文档的 compare_exchange 函数。 当 compare_exchange panics 时,这是未定义的行为。 当前,该函数使用未定义的指令中止进程。