Struct MwCas

Source
pub struct MwCas<'g> { /* private fields */ }
Expand description

Multi-word CAS structure.

MwCas contains multi-word CAS state, including pointers which should be changed, original and new pointer values. MwCas provides compare and exchange operations to register CAS operations on pointers. When all compare and exchange operations registered, caller should execute exec method to actually perform multi-word CAS.

Implementations§

Source§

impl<'g> MwCas<'g>

Source

pub fn new() -> Self

Create new MwCAS.

Source

pub fn compare_exchange<T>( &mut self, target: &'g HeapPointer<T>, orig_val: &'g T, new_val: T, )

Add compare-exchange operation to MwCAS for heap allocated data.

  • target points to heap allocated data which should be replaced by new value.
  • orig_val is value is from target pointer at some point in time, using HeapPointer.read() method.
  • new_val will be installed to target on MwCas success. If MwCas will fail, then new_val will be dropped.
Source

pub fn compare_exchange_u64( &mut self, target: &'g U64Pointer, orig_val: u64, new_val: u64, )

Add compare-exchange operation to MwCAS for simple u64.

  • target struct contains u64 which should be replaced by MwCas.
  • orig_val is expected value of target during CAS.
  • new_val will be installed to target on MwCas success.
Source

pub fn exec(self, guard: &Guard) -> bool

Execute all registered CAS operations and return result status.

guard is used for reclamation of memory used by previous values which were replaced during MwCas by new one.

Trait Implementations§

Source§

impl<'g> Default for MwCas<'g>

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<'g> Drop for MwCas<'g>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

§

impl<'g> !Freeze for MwCas<'g>

§

impl<'g> !RefUnwindSafe for MwCas<'g>

§

impl<'g> !Send for MwCas<'g>

§

impl<'g> !Sync for MwCas<'g>

§

impl<'g> Unpin for MwCas<'g>

§

impl<'g> !UnwindSafe for MwCas<'g>

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<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
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.