1 个稳定版本
1.0.0 | 2024 年 7 月 31 日 |
---|
#261 在 并发
每月 132 次下载
20KB
285 行
axka-rcu
一个用于保护共享数据的引用计数读-复制-更新(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 拉取请求或直接给我发邮件
-
设置
git send-email
-
提交您的更改,这将会打开一个文本编辑器
gitcommit
-
将您的补丁发给我。该命令发送最后的提交
gitsend-email --到="[email protected]"HEAD^
许可协议
许可协议为以下之一
- Apache 许可协议 2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可协议 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
除非您明确指出,否则您提交给作品的所有贡献,根据 Apache-2.0 许可证定义,应按上述方式双许可,不附加任何额外条款或条件。
依赖项
~170–345KB