Struct Guard

Source
pub struct Guard<T> { /* private fields */ }
Available on crate feature hazard_ptr only.
Expand description

A Guard protects a single Memory address and provides secure access to it, as long as the Guard is not dropped

Implementations§

Source§

impl<T> Guard<T>

Source

pub fn raw(&self) -> *const T

Gets the underlying PTR to the Data protected by the Guard

Source

pub fn protect(&mut self, atom_ptr: &AtomicPtr<T>, load_order: Ordering)

Loads the most recent Ptr-Value from the given AtomicPtr and updates the current Guard to now protect this new Ptr.

§Usage

This should be used when you already have Guard, but no longer need the original Guard/Value and now need to protect another new Memory- Location, as this method reuses an already owned Hazard-Pointer/Guard and therefore does not need to acquire a Hazard-Pointer beforehand.

This is especially useful when iterating a Datastruture, as you often only have one Node you are currently processing and then move on to another one.

Source

pub unsafe fn convert<O>(self) -> Guard<O>

Converts the Guard into a Guard for a differnt underlying Type

§Safety

You must make sure that the underlying Ptr is valid for the Type O

Trait Implementations§

Source§

impl<T> Debug for Guard<T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<T> Drop for Guard<T>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

impl<T> Deref for Guard<T>

Source§

type Target = T

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.

Auto Trait Implementations§

§

impl<T> Freeze for Guard<T>

§

impl<T> RefUnwindSafe for Guard<T>
where T: RefUnwindSafe,

§

impl<T> !Send for Guard<T>

§

impl<T> !Sync for Guard<T>

§

impl<T> Unpin for Guard<T>

§

impl<T> UnwindSafe for Guard<T>
where T: RefUnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.