Skip to main content

AtomicSwap

Trait AtomicSwap 

Source
pub trait AtomicSwap: AtomicLoad + AtomicStore {
    // Provided method
    unsafe fn atomic_swap(
        dst: *mut MaybeUninit<Self>,
        val: MaybeUninit<Self>,
        order: Ordering,
    ) -> MaybeUninit<Self> { ... }
}
Expand description

Atomic swap.

This trait is sealed and cannot be implemented for types outside of atomic-maybe-uninit.

Provided Methods§

Source

unsafe fn atomic_swap( dst: *mut MaybeUninit<Self>, val: MaybeUninit<Self>, order: Ordering, ) -> MaybeUninit<Self>

Stores a value into dst, returning the previous value.

atomic_swap takes an Ordering argument which describes the memory ordering of this operation. All ordering modes are possible. Note that using Acquire makes the store part of this operation Relaxed, and using Release makes the load part Relaxed.

§Safety

Behavior is undefined if any of the following conditions are violated:

  • dst must be valid for both reads and writes.
  • dst must be aligned to size_of::<MaybeUninit<T>>() (note that on some platforms this can be bigger than align_of::<MaybeUninit<T>>()).
  • order must be SeqCst, AcqRel, Acquire, Release, or Relaxed.
  • You must adhere to the Memory model for atomic accesses. In particular, it is not allowed to mix conflicting atomic and non-atomic accesses, or atomic accesses of different sizes, without synchronization.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementations on Foreign Types§

Source§

impl AtomicSwap for i8

Source§

impl AtomicSwap for i16

Source§

impl AtomicSwap for i32

Source§

impl AtomicSwap for i64

Source§

impl AtomicSwap for i128

Source§

impl AtomicSwap for isize

Source§

impl AtomicSwap for u8

Source§

impl AtomicSwap for u16

Source§

impl AtomicSwap for u32

Source§

impl AtomicSwap for u64

Source§

impl AtomicSwap for u128

Source§

impl AtomicSwap for usize

Implementors§