[−][src]Trait crossbeam_epoch::Pointable
Types that are pointed to by a single word.
In concurrent programming, it is necessary to represent an object within a word because atomic operations (e.g., reads, writes, read-modify-writes) support only single words. This trait qualifies such types that are pointed to by a single word.
The trait generalizes Box<T>
for a sized type T
. In a box, an object of type T
is
allocated in heap and it is owned by a single-word pointer. This trait is also implemented for
[MaybeUninit<T>]
by storing its size along with its elements and pointing to the pair of array
size and elements.
Pointers to Pointable
types can be stored in [Atomic
], [Owned
], and [Shared
]. In
particular, Crossbeam supports dynamically sized slices as follows.
use std::mem::MaybeUninit; use crossbeam_epoch::Owned; let o = Owned::<[MaybeUninit<i32>]>::init(10); // allocating [i32; 10]
Associated Types
type Init
The type for initializers.
Associated Constants
Loading content...Required methods
unsafe fn init(init: Self::Init) -> usize
unsafe fn deref<'a>(ptr: usize) -> &'a Self
Dereferences the given pointer.
Safety
- The given
ptr
should have been initialized with [Pointable::init
]. ptr
should not have yet been dropped by [Pointable::drop
].ptr
should not be mutably dereferenced by [Pointable::deref_mut
] concurrently.
unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut Self
Mutably dereferences the given pointer.
Safety
- The given
ptr
should have been initialized with [Pointable::init
]. ptr
should not have yet been dropped by [Pointable::drop
].ptr
should not be dereferenced by [Pointable::deref
] or [Pointable::deref_mut
] concurrently.
unsafe fn drop(ptr: usize)
Drops the object pointed to by the given pointer.
Safety
- The given
ptr
should have been initialized with [Pointable::init
]. ptr
should not have yet been dropped by [Pointable::drop
].ptr
should not be dereferenced by [Pointable::deref
] or [Pointable::deref_mut
] concurrently.