12 个版本
0.3.3 | 2022 年 3 月 23 日 |
---|---|
0.3.1 | 2022 年 3 月 15 日 |
0.2.2 | 2022 年 3 月 12 日 |
0.1.5 | 2016 年 12 月 12 日 |
#33 在 #arc
14,656 每月下载量
11KB
222 行
arc-cell
一个简单的库,用于包含 Arc/Weak 引用的并发类似 Cell 对象。
[dependencies]
arc-cell = "0.3"
使用方法
轻量级可交换的 Arc 成员
use std::sync::Arc;
use arc_cell::ArcCell;
pub struct Thing {
data: ArcCell<Vec<u8>>,
}
impl Thing {
pub fn update(&self, data: Arc<Vec<u8>>) {
self.data.set(data);
}
}
自引用结构
use std::sync::Arc;
use arc_cell::WeakCell;
pub struct Thing {
self_ref: WeakCell<Thing>,
// ...
}
impl Thing {
pub fn new() -> Arc<Thing> {
let thing = Arc::new(Thing {
self_ref: WeakCell::empty(),
});
thing.self_ref.store(&thing);
thing
}
pub fn clone_ref(&self) -> Arc<Thing> {
self.self_ref.upgrade().expect("This should be valid if we have a valid self")
}
}