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::SeqCst
、Ordering::Acquire
或 Ordering::Relaxed
。
有关此处的内存顺序的更多信息,请参见标准库中其他 Atomic*
类型的 compare_exchange
文档。
Unsafety
此方法是不安全的,因为它使用裸指针,并且将尝试读取并可能在指针处写入内存。 指针还必须在 16 字节边界上对齐。
此方法还要求 cmpxchg16b
CPU 特性在运行时可用,才能正常工作。
如果运行二进制文件的 CPU 实际上不支持 cmpxchg16b
,并且程序输入了最终会到达该函数的执行路径,则该行为未定义。