haphazard 0.1.8

Dynamic memory management for lock-free data structures using hazard pointers.
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
use crate::sync::atomic::AtomicPtr;
use core::sync::atomic::Ordering;

pub(crate) struct HazPtrRecord {
    pub(crate) ptr: AtomicPtr<u8>,
    pub(crate) next: AtomicPtr<HazPtrRecord>,
    pub(crate) available_next: AtomicPtr<HazPtrRecord>,
}

impl HazPtrRecord {
    pub(crate) fn reset(&self) {
        self.ptr.store(core::ptr::null_mut(), Ordering::Release);
    }

    pub(crate) fn protect(&self, ptr: *mut u8) {
        self.ptr.store(ptr, Ordering::Release);
    }
}