AtomicPtr::compare_exchange在指向结构体的指针上的行为是什么?
创始人
2024-09-21 18:30:33
0

使用AtomicPtr::compare_exchange在指向结构体的指针上执行原子操作需要在比较和交换中指定用于比较的函数和用于交换的函数。

比较函数应该接受两个指向结构体的const指针和一个指向void的指针参数,然后将其转换为指向AtomicPtr实例化的结构体类型的指针,并返回一个bool值,以指示比较的结果。

交换函数应该接受两个指向结构体的指针和一个指向void的指针参数,并通过将交换值复制到指向原子指针的指针中来更改指针的值。

以下是一个使用AtomicPtr::compare_exchange在指向结构体的指针上执行原子操作的示例:

use std::sync::atomic::{AtomicPtr, Ordering};

struct Data {
    value: i32,
    next: Option>,
}

extern "C" fn compare_ptrs(a: *const Data, b: *const Data, _: *mut ()) -> bool {
    a == b
}

extern "C" fn exchange_ptrs(old: *mut Data, new: *mut Data, _: *mut ()) -> *mut Data {
    let prev = unsafe { (*old).next.take() };
    unsafe { (*new).next = prev };
    old
}

fn main() {
    let head = Box::new(Data {
        value: 1,
        next: None,
    });

    let head_ptr = AtomicPtr::new(Box::leak(head) as *mut Data);

    let new_head = Box::new(Data {
        value: 0,
        next: Some(head),
    });

    let new_ptr = Box::into_raw(new_head);

    let res = head_ptr.compare_exchange(
        Box::leak(head) as *const Data,
        new_ptr,
        Ordering::AcqRel,
        Ordering::Acquire,
    );

    assert!(res.is_ok());

    // verify new head
    let gen_head = unsafe { &

相关内容

热门资讯

往昔有辅助"wepo... 往昔有辅助"wepoker有脚本吗"开挂(透视)辅助安装(必胜教程有挂总结)>>您好:软件加1367...
演示辅助"纳祥游戏脚... 演示辅助"纳祥游戏脚本"开挂(攻略)辅助安装(有挂猫腻);亲,纳祥游戏脚本这款游戏原来确实可以开挂的...
透视代打!wepoker辅助是... 透视代打!wepoker辅助是真的假的,wepoker智能辅助插件(透视)开挂辅助挂存在挂教程 >>...
原先有辅助"wepo... 原先有辅助"wepoker是不是有人用挂"开挂(透视)辅助安装(总结教程有挂详细) 【无需打开直接搜...
透视教程!新永和辅助,微信雀神... 透视教程!新永和辅助,微信雀神挂件辅助器(透视)开挂辅助平台详细教程【无需打开直接搜索加薇13670...
大纲开挂"鱼虾蟹控制... 鱼虾蟹控制器辅助器开挂是一款可以让一直输的玩家,快速成为一个“必胜”的ai辅助神器,有需要的用户可以...
固有有开挂"小闲巴渝... 小闲巴渝辅助是一款专注玩家量身打造的游戏记牌类型软件,在小闲巴渝辅助这款游戏中我们可以记录下每张牌的...
练习开挂"潮汕馆辅助... 练习开挂"潮汕馆辅助"开挂(插件)辅助脚本(有挂教学) 了解更多开挂安装加(136704302)微信...
透视总结!凑一桌游戏春天辅助,... 透视总结!凑一桌游戏春天辅助,新西部辅助外卦(透视)开挂辅助插件力荐教程【无需打开直接搜索加薇136...
本来有开挂"闲逸软件... 本来有开挂"闲逸软件安卓"开挂(透视)辅助平台(实用技巧有挂分享);亲,闲逸软件安卓这款游戏原来确实...