peril

Crates.ioperil
lib.rsperil
version0.4.2
sourcesrc
created_at2020-12-28 23:46:29.661002
updated_at2021-01-06 03:42:01.142263
descriptionFast and safe Hazard pointers for Rust.
homepagehttps://github.com/junkerjorg/peril
repositoryhttps://github.com/junkerjorg/peril
max_upload_size
id328501
size43,816
(junkerjorg)

documentation

README

peril

Latest version Documentation Lines of code MIT

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), &registry);
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

Commit count: 31

cargo fmt