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 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 时,这是未定义的行为。
当前,该函数使用未定义的指令中止进程。