16 个版本 (4 个重大更新)
0.4.2 | 2021 年 1 月 6 日 |
---|---|
0.4.1 | 2021 年 1 月 5 日 |
0.3.2 | 2021 年 1 月 3 日 |
0.2.5 | 2021 年 1 月 3 日 |
0.0.5 | 2020 年 12 月 31 日 |
在 并发 中排名第 595
每月下载量 34 次
用于 faa_array_queue
43KB
660 行
peril
Peril 是 Rust 的快速且安全的危险指针实现。Peril 使用 32 个危险记录的块来快速标记指针为受保护。这比其他向用户 API 公开线程 ID 的实现效率低,但它也免除了用户需要跟踪系统中所有活动线程的麻烦。
使用方法
将这些行添加到您的 Cargo.toml
[dependencies]
peril = "0.4"
然后在您的无锁更新循环中使用 HazardPointers
use peril::{HazardRegistry, HazardValue, HazardRecord, HazardPointer, Ordering};
let registry = HazardRegistry::default();
let hp = HazardPointer::new(HazardValue::boxed(0), ®istry);
let mut record = HazardRecord::default();
loop {
let scope = hp.protect(&mut record);
let new = *(scope.as_ref().unwrap()) + 1;
match scope.compare_exchange(HazardValue::boxed(new), Ordering::Relaxed, Ordering::Relaxed)
{
Ok(old) =>
{
assert!(old.as_ref().unwrap() == &0);
break;
}
Err(_) => assert!(false),
}
}
许可证
根据 MIT 许可证 许可
依赖项
~235KB