1 // 该函数在cmpxchg.c中实现
2 extern "C" {
__try_cmpxchg_q(ptr: *mut u64, old_ptr: *mut u64, new_ptr: *mut u64) -> bool3 fn __try_cmpxchg_q(ptr: *mut u64, old_ptr: *mut u64, new_ptr: *mut u64) -> bool;
4 }
5
6 /// @brief 封装lock cmpxchg指令
7 /// 由于Rust实现这部分的内联汇编比较麻烦(实在想不出办法),因此使用C的实现。
8 #[inline]
try_cmpxchg_q(ptr: *mut u64, old_ptr: *mut u64, new_ptr: *mut u64) -> bool9 pub unsafe fn try_cmpxchg_q(ptr: *mut u64, old_ptr: *mut u64, new_ptr: *mut u64) -> bool {
10 let retval = __try_cmpxchg_q(ptr, old_ptr, new_ptr);
11 return retval;
12 }
13