#rcu #shared-data #arc #sync #data-structures #debugging

无 std axka-rcu

用于保护共享数据的引用计数读-复制-更新(RCU)原语

1 个稳定版本

1.0.0 2024 年 7 月 31 日

#261并发

Download history 122/week @ 2024-07-29 10/week @ 2024-08-05

每月 132 次下载

MIT/Apache

20KB
285

axka-rcu

Crates.io Documentation

一个用于保护共享数据的引用计数读-复制-更新(RCU)原语,非常有用

示例

use std::{thread::sleep, time::Duration, sync::Arc};
use axka_rcu::Rcu;

#[derive(Clone, Debug, PartialEq)]
struct Player {
    name: &'static str,
    points: usize
}

let players = Arc::new(Rcu::new(Arc::new(vec![
    Player { name: "foo", points: 100 }
])));
let players2 = players.clone();

// Lock-free writing
std::thread::spawn(move || players2.update(|players| {
    sleep(Duration::from_millis(50));
    players.push(Player {
        name: "bar",
        points: players[0].points + 50
    })
}));

// Lock-free reading
assert_eq!(*players.read(), [
    Player { name: "foo", points: 100 }
]);

sleep(Duration::from_millis(60));
assert_eq!(*players.read(), [
    Player { name: "foo", points: 100 },
    Player { name: "bar", points: 150 }
]);

请查看文档以获取更多详细信息。

提交补丁

请首先确保您没有引入任何回归,并在仓库根目录下运行以下命令格式化代码。

cargo fmt
cargo clippy
cargo test

您可以选择提交一个 GitHub 拉取请求或直接给我发邮件

  1. 设置 git send-email

    https://git-send-email.io/

  2. 提交您的更改,这将会打开一个文本编辑器

    gitcommit

  3. 将您的补丁发给我。该命令发送最后的提交

    gitsend-email --="[email protected]"HEAD^

许可协议

许可协议为以下之一

任选其一。

除非您明确指出,否则您提交给作品的所有贡献,根据 Apache-2.0 许可证定义,应按上述方式双许可,不附加任何额外条款或条件。

依赖项

~170–345KB