16 releases (4 breaking)
0.4.2 | Jan 6, 2021 |
---|---|
0.4.1 | Jan 5, 2021 |
0.3.2 | Jan 3, 2021 |
0.2.5 | Jan 3, 2021 |
0.0.5 | Dec 31, 2020 |
#670 in Concurrency
60 downloads per month
Used in faa_array_queue
43KB
660 lines
peril
Peril is fast and safe Hazard pointer implementation for Rust. Peril uses Chunks of 32 HazardRecords to quickly mark a pointer as protected. This is less efficent than other implementations that expose thread IDs to the user API, but it also frees the user from having to keep track of all active threads in the system.
Usage
Add these lines to your Cargo.toml
:
[dependencies]
peril = "0.4"
than use the HazardPointers in your lock-free update loop:
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),
}
}
License
Licensed under MIT license
Dependencies
~240KB