core::marker::Send - Rust
Description: API documentation for the Rust `Send` trait in crate `core`.
Keywords: rust, rustlang, rust-lang, Send

# 1.0.0[−][src]Trait core::marker::Send

    pub unsafe auto trait Send { }

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 LocalWaker`

[src]

###

`impl Send for Waker`

[src]

###

`impl<T> Send for AtomicPtr<T>`

[src]

###

`impl<T: Send + ?Sized, '_> Send for &'_ mut T`

[src]

###

`impl<T: Send, '_> Send for core::slice::IterMut<'_, T>`

[src]

###

`impl<T: Sync + ?Sized, '_> Send for &'_ T`

[src]

###

`impl<T: Sync, '_> Send for core::slice::Iter<'_, T>`

[src]

###

`impl<T: ?Sized> !Send for *const T`

[src]

###

`impl<T: ?Sized> !Send for *mut T`

[src]

###

`impl<T: ?Sized> !Send for NonNull<T>`

[src]

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

###

`impl<T: ?Sized> Send for Cell<T> where T: Send,`

[src]

###

`impl<T: ?Sized> Send for RefCell<T> where T: Send,`

[src]

## Auto implementors

###

`impl !Send for Excess`

###

`impl !Send for TraitObject`

###

`impl Send for core::cmp::Ordering`

###

`impl Send for c_void`

###

`impl Send for Alignment`

###

`impl Send for FpCategory`

###

`impl Send for SearchStep`

###

`impl Send for core::sync::atomic::Ordering`

###

`impl Send for AllocErr`

###

`impl Send for CannotReallocInPlace`

###

`impl Send for Layout`

###

`impl Send for LayoutErr`

###

`impl Send for TypeId`

###

`impl Send for float64x1_t`

###

`impl Send for float64x2_t`

###

`impl Send for int8x16x2_t`

###

`impl Send for int8x16x3_t`

###

`impl Send for int8x16x4_t`

###

`impl Send for poly64x1_t`

###

`impl Send for poly64x2_t`

###

`impl Send for poly8x16x2_t`

###

`impl Send for poly8x16x3_t`

###

`impl Send for poly8x16x4_t`

###

`impl Send for uint8x16x2_t`

###

`impl Send for uint8x16x3_t`

###

`impl Send for uint8x16x4_t`

###

`impl Send for float32x2_t`

###

`impl Send for float32x4_t`

###

`impl Send for int16x2_t`

###

`impl Send for int16x4_t`

###

`impl Send for int16x8_t`

###

`impl Send for int32x2_t`

###

`impl Send for int32x4_t`

###

`impl Send for int64x1_t`

###

`impl Send for int64x2_t`

###

`impl Send for int8x16_t`

###

`impl Send for int8x4_t`

###

`impl Send for int8x8_t`

###

`impl Send for int8x8x2_t`

###

`impl Send for int8x8x3_t`

###

`impl Send for int8x8x4_t`

###

`impl Send for poly16x4_t`

###

`impl Send for poly16x8_t`

###

`impl Send for poly8x16_t`

###

`impl Send for poly8x8_t`

###

`impl Send for poly8x8x2_t`

###

`impl Send for poly8x8x3_t`

###

`impl Send for poly8x8x4_t`

###

`impl Send for uint16x2_t`

###

`impl Send for uint16x4_t`

###

`impl Send for uint16x8_t`

###

`impl Send for uint32x2_t`

###

`impl Send for uint32x4_t`

###

`impl Send for uint64x1_t`

###

`impl Send for uint64x2_t`

###

`impl Send for uint8x16_t`

###

`impl Send for uint8x4_t`

###

`impl Send for uint8x8_t`

###

`impl Send for uint8x8x2_t`

###

`impl Send for uint8x8x3_t`

###

`impl Send for uint8x8x4_t`

###

`impl Send for i8x16`

###

`impl Send for vector_bool_long`

###

`impl Send for vector_double`

###

`impl Send for vector_signed_long`

###

`impl Send for vector_unsigned_long`

###

`impl Send for CpuidResult`

###

`impl Send for __m128`

###

`impl Send for __m128d`

###

`impl Send for __m128i`

###

`impl Send for __m256`

###

`impl Send for __m256d`

###

`impl Send for __m256i`

###

`impl Send for __m64`

###

`impl Send for TryFromSliceError`

###

`impl Send for core::ascii::EscapeDefault`

###

`impl Send for BorrowError`

###

`impl Send for BorrowMutError`

###

`impl Send for CharTryFromError`

###

`impl Send for DecodeUtf16Error`

###

`impl Send for EscapeDebug`

###

`impl Send for core::char::EscapeDefault`

###

`impl Send for EscapeUnicode`

###

`impl Send for ParseCharError`

###

`impl Send for ToLowercase`

###

`impl Send for ToUppercase`

###

`impl Send for UnicodeVersion`

###

`impl Send for Error`

###

`impl Send for SipHasher`

###

`impl Send for Pinned`

###

`impl Send for NonZeroU128`

###

`impl Send for NonZeroU16`

###

`impl Send for NonZeroU32`

###

`impl Send for NonZeroU64`

###

`impl Send for NonZeroU8`

###

`impl Send for NonZeroUsize`

###

`impl Send for ParseFloatError`

###

`impl Send for ParseIntError`

###

`impl Send for TryFromIntError`

###

`impl Send for RangeFull`

###

`impl Send for NoneError`

###

`impl Send for Utf8Lossy`

###

`impl Send for ParseBoolError`

###

`impl Send for Utf8Error`

###

`impl Send for AtomicBool`

###

`impl Send for AtomicI16`

###

`impl Send for AtomicI32`

###

`impl Send for AtomicI64`

###

`impl Send for AtomicI8`

###

`impl Send for AtomicIsize`

###

`impl Send for AtomicU16`

###

`impl Send for AtomicU32`

###

`impl Send for AtomicU64`

###

`impl Send for AtomicU8`

###

`impl Send for AtomicUsize`

###

`impl Send for Duration`

###

`impl<'a> !Send for Arguments<'a>`

###

`impl<'a> !Send for Formatter<'a>`

###

`impl<'a> !Send for PanicInfo<'a>`

###

`impl<'a> Send for Location<'a>`

###

`impl<'a> Send for Utf8LossyChunk<'a>`

###

`impl<'a> Send for Utf8LossyChunksIter<'a>`

###

`impl<'a> Send for CharSearcher<'a>`

###

`impl<'a> Send for Bytes<'a>`

###

`impl<'a> Send for CharIndices<'a>`

###

`impl<'a> Send for Chars<'a>`

###

`impl<'a> Send for EncodeUtf16<'a>`

###

`impl<'a> Send for Lines<'a>`

###

`impl<'a> Send for LinesAny<'a>`

###

`impl<'a> Send for SplitAsciiWhitespace<'a>`

###

`impl<'a> Send for SplitWhitespace<'a>`

###

`impl<'a, 'b> !Send for DebugList<'a, 'b>`

###

`impl<'a, 'b> !Send for DebugMap<'a, 'b>`

###

`impl<'a, 'b> !Send for DebugSet<'a, 'b>`

###

`impl<'a, 'b> !Send for DebugStruct<'a, 'b>`

###

`impl<'a, 'b> !Send for DebugTuple<'a, 'b>`

###

`impl<'a, 'b> Send for CharSliceSearcher<'a, 'b>`

###

`impl<'a, 'b> Send for StrSearcher<'a, 'b>`

###

`impl<'a, A> Send for core::option::Iter<'a, A> where A: Sync,`

###

`impl<'a, A> Send for core::option::IterMut<'a, A> where A: Send,`

###

`impl<'a, F> Send for CharPredicateSearcher<'a, F> where F: Send,`

###

`impl<'a, P> Send for MatchIndices<'a, P> where <P as Pattern<'a>>::Searcher: Send,`

###

`impl<'a, P> Send for Matches<'a, P> where <P as Pattern<'a>>::Searcher: Send,`

###

`impl<'a, P> Send for RMatchIndices<'a, P> where <P as Pattern<'a>>::Searcher: Send,`

###

`impl<'a, P> Send for RMatches<'a, P> where <P as Pattern<'a>>::Searcher: Send,`

###

`impl<'a, P> Send for core::str::RSplit<'a, P> where <P as Pattern<'a>>::Searcher: Send,`

###

`impl<'a, P> Send for core::str::RSplitN<'a, P> where <P as Pattern<'a>>::Searcher: Send,`

###

`impl<'a, P> Send for RSplitTerminator<'a, P> where <P as Pattern<'a>>::Searcher: Send,`

###

`impl<'a, P> Send for core::str::Split<'a, P> where <P as Pattern<'a>>::Searcher: Send,`

###

`impl<'a, P> Send for core::str::SplitN<'a, P> where <P as Pattern<'a>>::Searcher: Send,`

###

`impl<'a, P> Send for SplitTerminator<'a, P> where <P as Pattern<'a>>::Searcher: Send,`

###

`impl<'a, T> Send for core::result::Iter<'a, T> where T: Sync,`

###

`impl<'a, T> Send for core::result::IterMut<'a, T> where T: Send,`

###

`impl<'a, T> Send for Chunks<'a, T> where T: Sync,`

###

`impl<'a, T> Send for ChunksExact<'a, T> where T: Sync,`

###

`impl<'a, T> Send for ChunksExactMut<'a, T> where T: Send,`

###

`impl<'a, T> Send for ChunksMut<'a, T> where T: Send,`

###

`impl<'a, T> Send for RChunks<'a, T> where T: Sync,`

###

`impl<'a, T> Send for RChunksExact<'a, T> where T: Sync,`

###

`impl<'a, T> Send for RChunksExactMut<'a, T> where T: Send,`

###

`impl<'a, T> Send for RChunksMut<'a, T> where T: Send,`

###

`impl<'a, T> Send for Windows<'a, T> where T: Sync,`

###

`impl<'a, T, P> Send for core::slice::RSplit<'a, T, P> where P: Send, T: Sync,`

###

`impl<'a, T, P> Send for RSplitMut<'a, T, P> where P: Send, T: Send,`

###

`impl<'a, T, P> Send for core::slice::RSplitN<'a, T, P> where P: Send, T: Sync,`

###

`impl<'a, T, P> Send for RSplitNMut<'a, T, P> where P: Send, T: Send,`

###

`impl<'a, T, P> Send for core::slice::Split<'a, T, P> where P: Send, T: Sync,`

###

`impl<'a, T, P> Send for SplitMut<'a, T, P> where P: Send, T: Send,`

###

`impl<'a, T, P> Send for core::slice::SplitN<'a, T, P> where P: Send, T: Sync,`

###

`impl<'a, T, P> Send for SplitNMut<'a, T, P> where P: Send, T: Send,`

###

`impl<'b, T> !Send for Ref<'b, T>`

###

`impl<'b, T> !Send for RefMut<'b, T>`

###

`impl<A> Send for Repeat<A> where A: Send,`

###

`impl<A> Send for core::option::IntoIter<A> where A: Send,`

###

`impl<A, B> Send for Chain<A, B> where A: Send, B: Send,`

###

`impl<A, B> Send for Zip<A, B> where A: Send, B: Send,`

###

`impl<F> Send for RepeatWith<F> where F: Send,`

###

`impl<H> Send for BuildHasherDefault<H> where H: Send,`

###

`impl<I> Send for DecodeUtf16<I> where I: Send,`

###

`impl<I> Send for Cloned<I> where I: Send,`

###

`impl<I> Send for Cycle<I> where I: Send,`

###

`impl<I> Send for Enumerate<I> where I: Send,`

###

`impl<I> Send for Flatten<I> where I: Send, <<I as Iterator>::Item as IntoIterator>::IntoIter: Send,`

###

`impl<I> Send for Fuse<I> where I: Send,`

###

`impl<I> Send for Peekable<I> where I: Send, <I as Iterator>::Item: Send,`

###

`impl<I> Send for Skip<I> where I: Send,`

###

`impl<I> Send for StepBy<I> where I: Send,`

###

`impl<I> Send for Take<I> where I: Send,`

###

`impl<I, F> Send for FilterMap<I, F> where F: Send, I: Send,`

###

`impl<I, F> Send for Inspect<I, F> where F: Send, I: Send,`

###

`impl<I, F> Send for Map<I, F> where F: Send, I: Send,`

###

`impl<I, P> Send for Filter<I, P> where I: Send, P: Send,`

###

`impl<I, P> Send for SkipWhile<I, P> where I: Send, P: Send,`

###

`impl<I, P> Send for TakeWhile<I, P> where I: Send, P: Send,`

###

`impl<I, St, F> Send for Scan<I, St, F> where F: Send, I: Send, St: Send,`

###

`impl<I, U, F> Send for FlatMap<I, U, F> where F: Send, I: Send, <U as IntoIterator>::IntoIter: Send,`

###

`impl<Idx> Send for Range<Idx> where Idx: Send,`

###

`impl<Idx> Send for RangeFrom<Idx> where Idx: Send,`

###

`impl<Idx> Send for RangeInclusive<Idx> where Idx: Send,`

###

`impl<Idx> Send for RangeTo<Idx> where Idx: Send,`

###

`impl<Idx> Send for RangeToInclusive<Idx> where Idx: Send,`

###

`impl<P> Send for Pin<P> where P: Send,`

###

`impl<T> Send for Bound<T> where T: Send,`

###

`impl<T> Send for Option<T> where T: Send,`

###

`impl<T> Send for Poll<T> where T: Send,`

###

`impl<T> Send for Reverse<T> where T: Send,`

###

`impl<T> Send for Empty<T> where T: Send,`

###

`impl<T> Send for Once<T> where T: Send,`

###

`impl<T> Send for Rev<T> where T: Send,`

###

`impl<T> Send for Discriminant<T>`

###

`impl<T> Send for Wrapping<T> where T: Send,`

###

`impl<T> Send for core::result::IntoIter<T> where T: Send,`

###

`impl<T> Send for MaybeUninit<T> where T: Send,`

###

`impl<T, E> Send for Result<T, E> where E: Send, T: Send,`

###

`impl<T: ?Sized> Send for UnsafeCell<T> where T: Send,`

###

`impl<T: ?Sized> Send for PhantomData<T> where T: Send,`

###

`impl<T: ?Sized> Send for ManuallyDrop<T> where T: Send,`

###

`impl<Y, R> Send for GeneratorState<Y, R> where R: Send, Y: Send,`

# Help

## Keyboard Shortcuts

`?`
  Show this help dialog
`S`
  Focus the search field
`↑`
  Move up in search results
`↓`
  Move down in search results
`↹`
  Switch tab
`⏎`
  Go to active search result
`+`
  Expand all sections
`-`
  Collapse all sections

## Search Tricks

Prefix searches with a type followed by a colon (e.g. `fn:`) to restrict the search to a given type.

Accepted types are: `fn`, `mod`, `struct`, `enum`, `trait`, `type`, `macro`, and `const`.

Search functions by type signature (e.g. `vec -> usize` or `* -> vec`)

Search multiple things at once by splitting your query with comma (e.g. `str,u8` or `String,struct:Vec,test`)