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 Rc
s 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.
impl Send for FullDecoded
impl<'a> Send for Part<'a>
NonNull
pointers are not Send
because the data they reference may be aliased.
impl<T, N> Send for GenericArray<T, N> where
T: Send,
N: ArrayLength<T>,
impl<T, R> Send for Once<T, R> where
T: Send,
impl<'a, R, T> Send for MappedRwLockReadGuard<'a, R, T> where
R: 'a + RawRwLock,
T: 'a + Sync + ?Sized,
<R as RawRwLock>::GuardMarker: Send,
impl<R, G> Send for RawReentrantMutex<R, G> where
R: RawMutex + Send,
G: GetThreadId + Send,
impl<R, G, T> Send for ReentrantMutex<R, G, T> where
R: RawMutex + Send,
G: GetThreadId + Send,
T: Send + ?Sized,
impl<'a, R, T> Send for MappedRwLockWriteGuard<'a, R, T> where
R: 'a + RawRwLock,
T: 'a + Send + ?Sized,
<R as RawRwLock>::GuardMarker: Send,
impl<'a, R, T> Send for MappedMutexGuard<'a, R, T> where
R: 'a + RawMutex,
T: 'a + Send + ?Sized,
<R as RawMutex>::GuardMarker: Send,
impl<'_, K, V, S, A> Send for OccupiedEntry<'_, K, V, S, A> where
K: Send,
V: Send,
S: Send,
A: Send + Allocator + Clone,
impl<'_, T> Send for signature_core::lib::slice::Iter<'_, T> where
T: Sync,
impl<'_, T> Send for signature_core::lib::slice::IterMut<'_, T> where
T: Send,
impl Send for signature_core::lib::fmt::Error
impl<'a, A> Send for signature_core::lib::option::Iter<'a, A> where
A: Sync,
impl<'a, A> Send for signature_core::lib::option::IterMut<'a, A> where
A: Send,
impl<'a, T> Send for signature_core::lib::result::Iter<'a, T> where
T: Sync,
impl<'a, T> Send for signature_core::lib::result::IterMut<'a, T> where
T: Send,
impl<'a, T, P> Send for signature_core::lib::slice::RSplit<'a, T, P> where
P: Send,
T: Sync,
impl<'a, T, P> Send for signature_core::lib::slice::Split<'a, T, P> where
P: Send,
T: Sync,
impl<'a, T, P> Send for signature_core::lib::slice::SplitN<'a, T, P> where
P: Send,
T: Sync,
impl<T> Send for signature_core::lib::iter::Once<T> where
T: Send,