24个版本
新版本 0.4.6 | 2024年8月20日 |
---|---|
0.4.5 | 2023年8月5日 |
0.4.3 | 2023年7月10日 |
0.3.0 | 2022年10月3日 |
0.0.1 | 2018年6月3日 |
#182 在 并发
每月776次下载
用于 15 个crate(直接使用2个)
12KB
220 行
pagetable
免等待4级页表,将u64
键映射到&AtomicU64
值。页扇出为2^16。如果键不存在,则在遍历层级时原子地创建中间页,并将值初始化为0
。
这是一个相对专业的数据结构,但对于需要跟踪具有从密集键空间分配的逻辑ID的许多项的并发系统维护元数据很有用,例如,数据库希望根据其64位ID跟踪页面位置,尽管它在碎片整理过程中被随机重写。
API
#[derive(Default)]
pub struct PageTable { .. }
pub fn get(&self, key: u64) -> &AtomicU64 { .. }
示例
let pt = PageTable::default();
for i in 0..100_000_000 {
pt.get(i).fetch_add(1, Ordering::SeqCst);
}
for i in 0..100_000_000 {
let value = pt.get(i).load(Ordering::SeqCst);
assert_eq!(value, 1);
}