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 and the Sync trait for more details.
Implementors§
impl Send for origin_studio::std::string::Drain<'_>
impl Send for Waker
impl<'a, R, T> Send for MappedMutexGuard<'a, R, T>where R: RawMutex + 'a, T: Send + 'a + ?Sized, <R as RawMutex>::GuardMarker: Send,
impl<'a, R, T> Send for MappedRwLockReadGuard<'a, R, T>where R: RawRwLock + 'a, T: Sync + 'a + ?Sized, <R as RawRwLock>::GuardMarker: Send,
impl<'a, R, T> Send for MappedRwLockWriteGuard<'a, R, T>where R: RawRwLock + 'a, T: Send + 'a + ?Sized, <R as RawRwLock>::GuardMarker: Send,
impl<Dyn> Send for DynMetadata<Dyn>where Dyn: ?Sized,
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<R, T> Send for Mutex<R, T>where R: RawMutex + Send, T: Send + ?Sized,
impl<R, T> Send for RwLock<R, T>where R: RawRwLock + Send, T: Send + ?Sized,
impl<T> !Send for *const Twhere T: ?Sized,
impl<T> !Send for *mut Twhere 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 &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.