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 { &

相关内容

热门资讯

终于懂了"poker... 终于懂了"pokermaster辅助器"开挂(透视)we poker免费辅助器(有挂方式);1、超多...
科普分享"微信三哥玩... 科普分享"微信三哥玩辅助器"开挂(透视)德州真人透视脚本(有挂方略);微信三哥玩辅助器简单的透视挂控...
一分钟揭秘"新西部微... 一分钟揭秘"新西部微信辅助"开挂(透视)wepoker代打辅助(有挂分享);是一项软件透视开挂的竞技...
一分钟了解"德州扑克... 一分钟了解"德州扑克游戏辅助"开挂(透视)wepoker可以免费玩吗(有挂头条);德州扑克游戏辅助是...
玩家必用"微乐麻将自... 玩家必用"微乐麻将自建房app"开挂(透视)hh poker辅助有用吗(有挂辅助);是一款益智类棋牌...
透视好友"新众乐辅助... 透视好友"新众乐辅助"开挂(透视)智星菠萝透视(有挂功能);免费下载原版,在软件透视开挂可以安装到哦...
透视挂"雀姬手机辅助... 透视挂"雀姬手机辅助脚本"开挂(透视)wepoker手机版辅助(果真有挂);1. ai辅助创建新账号...
专业讨论"边锋辅助脚... 专业讨论"边锋辅助脚本"开挂(透视)uupoker有透视吗(存在有挂);1、不需要AI权限,帮助你快...
来一盘"微信途游辅助... 来一盘"微信途游辅助器"开挂(透视)wepoker私人局透视教程(了解有挂);微信途游辅助器简单的透...
盘点几款"黑桃k大厅... 盘点几款"黑桃k大厅辅助"开挂(透视)hhpoker德州有挂吗(有挂技巧);黑桃k大厅辅助AI智能教...