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 alloc::string::Drain<'_>
impl Send for Waker
impl Send for BorrowedHandle<'_>
impl Send for HandleOrInvalid
impl Send for HandleOrNull
impl Send for OwnedHandle
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<'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<'a, A, D> Send for AxisChunksIter<'a, A, D>where A: Sync, D: Send,
impl<'a, A, D> Send for AxisChunksIterMut<'a, A, D>where A: Send, D: Send,
impl<'a, A, D> Send for AxisIter<'a, A, D>where A: Sync, D: Send,
impl<'a, A, D> Send for AxisIterMut<'a, A, D>where A: Send, D: Send,
impl<'a, A, D> Send for IndexedIter<'a, A, D>where A: Sync, D: Send,
impl<'a, A, D> Send for IndexedIterMut<'a, A, D>where A: Send, D: Send,
impl<'a, A, D> Send for ndarray::iterators::Iter<'a, A, D>where A: Sync, D: Send,
impl<'a, A, D> Send for ndarray::iterators::IterMut<'a, A, D>where A: Send, D: Send,
impl<'a, A, D> Send for LanesIter<'a, A, D>where A: Sync, D: Send,
impl<'a, A, D> Send for LanesIterMut<'a, A, D>where A: Send, D: Send,
impl<'a, T, R, C, RStride, CStride> Send for SliceStorage<'a, T, R, C, RStride, CStride>where T: Send, R: Dim, C: Dim, RStride: Dim, CStride: Dim,
impl<'a, T, R, C, RStride, CStride> Send for SliceStorageMut<'a, T, R, C, RStride, CStride>where T: Send, R: Dim, C: Dim, RStride: Dim, CStride: Dim,
impl<A> Send for OwnedRepr<A>where A: Send,
impl<Dyn> Send for DynMetadata<Dyn>where Dyn: ?Sized,
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, S: 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<S, D> Send for ArrayBase<S, D>where S: Send + Data, D: Send,
ArrayBase
is Send
when the storage type is.
impl<T> !Send for *const Twhere T: ?Sized,
impl<T> !Send for *mut Twhere T: ?Sized,
impl<T> !Send for Rc<T>where T: ?Sized,
impl<T> !Send for alloc::rc::Weak<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.
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 &Twhere T: Sync + ?Sized,
impl<T> Send for ThinBox<T>where T: Send + ?Sized,
ThinBox<T>
is Send
if T
is Send
because the data is owned.