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.
Implementors
impl !Send for Args
impl !Send for ArgsOs
impl Send for Waker
impl Send for std::sync::once::Once
impl<'_> Send for alloc::string::Drain<'_>
impl<'_, K, V> Send for IterMut<'_, K, V> where
K: Send,
V: Send,
impl<'_, K, V> Send for IterMut<'_, K, V> where
K: Send,
V: 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<'_, K, V, S, A> Send for OccupiedEntry<'_, K, V, S, A> where
K: Send,
V: Send,
S: Send,
A: Send + Allocator + Clone,
impl<'_, K, V, S, A> Send for RawOccupiedEntryMut<'_, K, V, S, A> where
K: Send,
V: Send,
A: Send + Allocator + Clone,
impl<'_, K, V, S, A> Send for RawOccupiedEntryMut<'_, K, V, S, A> where
K: Send,
V: Send,
S: Send,
A: Send + Allocator + Clone,
impl<'_, T> !Send for MutexGuard<'_, T> where
T: ?Sized,
impl<'_, T> !Send for RwLockReadGuard<'_, T> where
T: ?Sized,
impl<'_, T> !Send for RwLockWriteGuard<'_, T> where
T: ?Sized,
impl<'_, T> Send for &T where
T: Sync + ?Sized,
impl<'_, T> Send for &mut T where
T: Send + ?Sized,
impl<'_, T> Send for wasmtime_environ::__core::slice::Iter<'_, T> where
T: Sync,
impl<'_, T> Send for wasmtime_environ::__core::slice::IterMut<'_, T> where
T: Send,
impl<'_, T> Send for Cursor<'_, T> where
T: Sync,
impl<'_, T> Send for CursorMut<'_, T> where
T: Send,
impl<'_, T> Send for alloc::collections::linked_list::Iter<'_, T> where
T: Sync,
impl<'_, T> Send for alloc::collections::linked_list::IterMut<'_, T> where
T: Send,
impl<'_, T> Send for alloc::collections::vec_deque::iter_mut::IterMut<'_, T> where
T: Send,
impl<'_, T, A> Send for alloc::collections::vec_deque::drain::Drain<'_, T, A> where
T: Send,
A: Allocator + Send,
impl<'_, T, A> Send for alloc::vec::drain::Drain<'_, T, A> where
T: Send,
A: Send + Allocator,
impl<'_, T, A> Send for RawDrain<'_, T, A> where
A: Allocator + Copy + Send,
T: Send,
impl<'a> Send for IoSlice<'a>
impl<'a> Send for IoSliceMut<'a>
impl<'a, 'b, K, Q, V, S, A> Send for OccupiedEntryRef<'a, 'b, K, Q, V, S, A> where
K: Send,
Q: Sync + ?Sized,
V: Send,
S: Send,
A: Send + Allocator + Clone,
impl<Dyn> Send for DynMetadata<Dyn> where
Dyn: ?Sized,
impl<T> !Send for *const T where
T: ?Sized,
impl<T> !Send for *mut T where
T: ?Sized,
impl<T> !Send for NonNull<T> where
T: ?Sized,
NonNull
pointers are not Send
because the data they reference may be aliased.