当使用AtomicPtr的比较交换操作(compare_exchange)时,如果比较失败,它将返回一个Result类型的结果,其中包含旧值和新值。可以使用match语句来处理此结果。
以下是一个示例代码:
use std::sync::atomic::{AtomicPtr, Ordering};
fn main() {
let mut ptr = AtomicPtr::new(std::ptr::null_mut());
let old_ptr = ptr.load(Ordering::Relaxed);
let new_ptr = &mut 0 as *mut i32;
let result = ptr.compare_exchange(old_ptr, new_ptr, Ordering::Relaxed, Ordering::Relaxed);
match result {
Ok(_) => println!("compare_exchange succeeded"),
Err(val) => println!("compare_exchange failed: old value = {:?}, new value = {:?}", val.0, val.1),
}
}
在这个例子中,AtomicPtr是被初始化为空指针,然后使用load操作获取它的旧值。接着,创建一个新的指针(new_ptr),并使用compare_exchange尝试将旧值替换为新值。
如果成功,将返回一个Ok(_)结果。否则,将返回一个Err(val)结果,其中val是一个元组,包含原来的旧值和尝试替换的新值。我们可以在match语句中检查这些结果,并相应地处理它们。