Trait core::marker::Send

1.0.0 · source · []
pub unsafe auto trait Send { }
Expand description

Types that can be transferred across thread boundaries.

This trait is automatically implemented when the compiler determines it’s appropriate.

An example of a non-Send type is the reference-counting pointer rc::Rc. If two threads attempt to clone Rcs that point to the same reference-counted value, they might try to update the reference count at the same time, which is undefined behavior because Rc doesn’t use atomic operations. Its cousin sync::Arc does use atomic operations (incurring some overhead) and thus is Send.

See the Nomicon for more details.

Implementors

NonNull pointers are not Send because the data they reference may be aliased.

impl<T: Send, A: Send + Allocator> Send for Drain<'_, T, A>

impl<T: Send, A: Allocator + Send> Send for IntoIter<T, A>

impl<T: ?Sized + Sync + Send> Send for Arc<T>

Auto implementors

impl Send for Global

impl<T: ?Sized, A> Send for Box<T, A> where
    A: Send,
    T: Send

impl<'a, T, F, A> Send for DrainFilter<'a, T, F, A> where
    A: Send,
    F: Send,
    T: Send

impl<T, A> Send for Vec<T, A> where
    A: Send,
    T: Send

impl Send for Error

impl Send for CStr

impl Send for CString

impl<'a, T> !Send for ArcBorrow<'a, T>

impl<T: ?Sized> Send for UniqueArc<T> where
    T: Send + Sync

impl<T, F> Send for ScopeGuard<T, F> where
    F: Send,
    T: Send

impl<T> Send for Opaque<T> where
    T: Send

impl<L, R> Send for Either<L, R> where
    L: Send,
    R: Send

impl !Send for ThisModule

This documentation is an old archive. Please see https://rust.docs.kernel.org instead.