Trait Sync
pub unsafe auto trait Sync
Types for which it is safe to share references between threads.
This trait is automatically implemented when the compiler determines it's appropriate.
The precise definition is: a type T is Sync if and only if &T is
Send. In other words, if there is no possibility of
undefined behavior (including data races) when passing
&T references between threads.
As one would expect, primitive types like u8 and f64
are all Sync, and so are simple aggregate types containing them,
like tuples, structs and enums. More examples of basic Sync
types include "immutable" types like &T, and those with simple
inherited mutability, such as Box<T>, Vec<T> and
most other collection types. (Generic parameters need to be Sync
for their container to be Sync.)
A somewhat surprising consequence of the definition is that &mut T
is Sync (if T is Sync) even though it seems like that might
provide unsynchronized mutation. The trick is that a mutable
reference behind a shared reference (that is, & &mut T)
becomes read-only, as if it were a & &T. Hence there is no risk
of a data race.
A shorter overview of how Sync and Send relate to referencing:
&TisSendif and only ifTisSync&mut TisSendif and only ifTisSend&Tand&mut TareSyncif and only ifTisSync
Types that are not Sync are those that have "interior
mutability" in a non-thread-safe form, such as Cell
and RefCell. These types allow for mutation of
their contents even through an immutable, shared reference. For
example the set method on Cell<T> takes &self, so it requires
only a shared reference &Cell<T>. The method performs no
synchronization, thus Cell cannot be Sync.
Another example of a non-Sync type is the reference-counting
pointer Rc. Given any reference &Rc<T>, you can clone
a new Rc<T>, modifying the reference counts in a non-atomic way.
For cases when one does need thread-safe interior mutability,
Rust provides atomic data types, as well as explicit locking via
sync::Mutex and sync::RwLock. These types
ensure that any mutation cannot cause data races, hence the types
are Sync. Likewise, sync::Arc provides a thread-safe
analogue of Rc.
Any types with interior mutability must also use the
cell::UnsafeCell wrapper around the value(s) which
can be mutated through a shared reference. Failing to doing this is
undefined behavior. For example, transmute-ing
from &T to &mut T is invalid.
See the Nomicon for more details about Sync.
Implementors
impl !Sync for Arguments<'_>impl !Sync for LocalWakerimpl !Sync for RawWakerimpl !Sync for VaListInnerimpl !Sync for iovecimpl Sync for Abiimpl Sync for AddrKindimpl Sync for AddrParseErrorimpl Sync for AesOutputimpl Sync for Alignmentimpl Sync for Alignmentimpl Sync for AlignmentEnumimpl Sync for AllocErrorimpl Sync for AlwaysEscapedimpl Sync for Arrayimpl Sync for AsciiCharimpl Sync for Assumeimpl Sync for AtomicOrderingimpl Sync for BasicBlockimpl Sync for BiasedFpimpl Sync for Big32x40impl Sync for Big8x3impl Sync for BorrowErrorimpl Sync for BorrowMutErrorimpl Sync for BorrowedBufDebugimpl Sync for ByteNeedleimpl Sync for ByteStrimpl Sync for Bytes<'_>impl Sync for BytesIsNotEmptyimpl Sync for CStrimpl Sync for CaseMappingIterimpl Sync for CharCaseimpl Sync for CharErrorKindimpl Sync for CharEscapeDebugimpl Sync for CharEscapeDefaultimpl Sync for CharEscapeUnicodeimpl Sync for CharTryFromErrorimpl Sync for CodePointInnerimpl Sync for Constimpl Sync for CpuidResultimpl Sync for Customimpl Sync for CustomOwnerimpl Sync for DebugAsHeximpl Sync for Decimalimpl Sync for DecimalSeqimpl Sync for DecodeUtf16Errorimpl Sync for Decodedimpl Sync for Directionimpl Sync for DriftsortRunimpl Sync for Durationimpl Sync for DynTraitimpl Sync for DynTraitPredicateimpl Sync for Emptyimpl Sync for EmptyNeedleimpl Sync for EncodeKey128Outputimpl Sync for EncodeKey256Outputimpl Sync for Errorimpl Sync for Errorimpl Sync for ErrorKindimpl Sync for EscapeByteimpl Sync for EscapeDebugimpl Sync for EscapeDebugExtArgsimpl Sync for EscapeDefaultimpl Sync for EscapeDefaultimpl Sync for EscapeUnicodeimpl Sync for FieldIdimpl Sync for FindImmimpl Sync for FloatErrorKindimpl Sync for FnPtrimpl Sync for FormattingOptionsimpl Sync for FpCategoryimpl Sync for FromBytesUntilNulErrorimpl Sync for FromBytesWithNulErrorimpl Sync for FullDecodedimpl Sync for Genericimpl Sync for GenericTypeimpl Sync for GetDisjointMutErrorimpl Sync for HvxVectorimpl Sync for HvxVectorimpl Sync for HvxVectorPairimpl Sync for HvxVectorPairimpl Sync for HvxVectorPredimpl Sync for HvxVectorPredimpl Sync for I32NotAllOnesimpl Sync for I64NotAllOnesimpl Sync for IndexRangeimpl Sync for IntErrorKindimpl Sync for Internalimpl Sync for IpAddrimpl Sync for Ipv4Addrimpl Sync for Ipv6Addrimpl Sync for Ipv6MulticastScopeimpl Sync for IsAsciiWhitespaceimpl Sync for IsNotEmptyimpl Sync for IsWhitespaceimpl Sync for L1Lutimpl Sync for L2Lutimpl Sync for Lastimpl Sync for Layoutimpl Sync for LayoutErrorimpl Sync for Lifetimeimpl Sync for LinesMapimpl Sync for Localityimpl Sync for Location<'_>impl Sync for MatchOnlyimpl Sync for MaybeEscapedimpl Sync for Nanosecondsimpl Sync for NeverShortCircuitResidualimpl Sync for NonZeroCharInnerimpl Sync for NonZeroI128Innerimpl Sync for NonZeroI16Innerimpl Sync for NonZeroI32Innerimpl Sync for NonZeroI64Innerimpl Sync for NonZeroI8Innerimpl Sync for NonZeroIsizeInnerimpl Sync for NonZeroU128Innerimpl Sync for NonZeroU16Innerimpl Sync for NonZeroU32Innerimpl Sync for NonZeroU64Innerimpl Sync for NonZeroU8Innerimpl Sync for NonZeroUsizeInnerimpl Sync for OneSidedRangeBoundimpl Sync for Orderingimpl Sync for Orderingimpl Sync for PadAdapterStateimpl Sync for ParseBoolErrorimpl Sync for ParseCharErrorimpl Sync for ParseFloatErrorimpl Sync for ParseIntErrorimpl Sync for PhantomPinnedimpl Sync for Pointerimpl Sync for PostPaddingimpl Sync for Rangeimpl Sync for RangeFullimpl Sync for RawWakerVTableimpl Sync for Referenceimpl Sync for RejectAndMatchimpl Sync for Repeatimpl Sync for Reprimpl Sync for ResumeTyimpl Sync for ReturnToArgimpl Sync for SYimpl Sync for SearchStepimpl Sync for SeekFromimpl Sync for ShortOffsetRunHeaderimpl Sync for Signimpl Sync for Signimpl Sync for SimdAlignimpl Sync for Sinkimpl Sync for Sip13Roundsimpl Sync for Sip24Roundsimpl Sync for SipHasherimpl Sync for SipHasher24impl Sync for Sliceimpl Sync for SocketAddrimpl Sync for SocketAddrV4impl Sync for SocketAddrV6impl Sync for Stateimpl Sync for Strimpl Sync for StrSearcherImplimpl Sync for ToCasefoldimpl Sync for ToLowercaseimpl Sync for ToTitlecaseimpl Sync for ToUppercaseimpl Sync for Traitimpl Sync for TryCaptureWithDebugimpl Sync for TryCaptureWithoutDebugimpl Sync for TryFromCharErrorimpl Sync for TryFromFloatSecsErrorimpl Sync for TryFromFloatSecsErrorKindimpl Sync for TryFromIntErrorimpl Sync for TryFromSliceErrorimpl Sync for Tupleimpl Sync for TwoWaySearcherimpl Sync for Typeimpl Sync for TypeIdimpl Sync for TypeKindimpl Sync for U32NotAllOnesimpl Sync for U64NotAllOnesimpl Sync for UnsafeBytesToStrimpl Sync for UnwindActionArgimpl Sync for UnwindTerminateReasonimpl Sync for UsizeNoHighBitimpl Sync for Utf8BoundaryErrorimpl Sync for Utf8Errorimpl Sync for VariantIdimpl Sync for Wakerimpl Sync for WideAesOutputimpl Sync for __m128impl Sync for __m128bhimpl Sync for __m128dimpl Sync for __m128himpl Sync for __m128iimpl Sync for __m256impl Sync for __m256bhimpl Sync for __m256dimpl Sync for __m256himpl Sync for __m256iimpl Sync for __m512impl Sync for __m512bhimpl Sync for __m512dimpl Sync for __m512himpl Sync for __m512iimpl Sync for __tile1024iimpl Sync for __v16i16impl Sync for __v16i8impl Sync for __v16u16impl Sync for __v16u8impl Sync for __v2f64impl Sync for __v2i64impl Sync for __v2u64impl Sync for __v32i8impl Sync for __v32u8impl Sync for __v4f32impl Sync for __v4f64impl Sync for __v4i32impl Sync for __v4i64impl Sync for __v4u32impl Sync for __v4u64impl Sync for __v8f32impl Sync for __v8i16impl Sync for __v8i32impl Sync for __v8u16impl Sync for __v8u32impl Sync for bf16impl Sync for c_voidimpl Sync for f16x2impl Sync for float16x4_timpl Sync for float16x4x2_timpl Sync for float16x4x3_timpl Sync for float16x4x4_timpl Sync for float16x8_timpl Sync for float16x8x2_timpl Sync for float16x8x3_timpl Sync for float16x8x4_timpl Sync for float32x2_timpl Sync for float32x2x2_timpl Sync for float32x2x3_timpl Sync for float32x2x4_timpl Sync for float32x4_timpl Sync for float32x4x2_timpl Sync for float32x4x3_timpl Sync for float32x4x4_timpl Sync for float64x1_timpl Sync for float64x1x2_timpl Sync for float64x1x3_timpl Sync for float64x1x4_timpl Sync for float64x2_timpl Sync for float64x2x2_timpl Sync for float64x2x3_timpl Sync for float64x2x4_timpl Sync for int16x4_timpl Sync for int16x4x2_timpl Sync for int16x4x3_timpl Sync for int16x4x4_timpl Sync for int16x8_timpl Sync for int16x8x2_timpl Sync for int16x8x3_timpl Sync for int16x8x4_timpl Sync for int32x2_timpl Sync for int32x2x2_timpl Sync for int32x2x3_timpl Sync for int32x2x4_timpl Sync for int32x4_timpl Sync for int32x4x2_timpl Sync for int32x4x3_timpl Sync for int32x4x4_timpl Sync for int64x1_timpl Sync for int64x1x2_timpl Sync for int64x1x3_timpl Sync for int64x1x4_timpl Sync for int64x2_timpl Sync for int64x2x2_timpl Sync for int64x2x3_timpl Sync for int64x2x4_timpl Sync for int8x16_timpl Sync for int8x16x2_timpl Sync for int8x16x3_timpl Sync for int8x16x4_timpl Sync for int8x8_timpl Sync for int8x8x2_timpl Sync for int8x8x3_timpl Sync for int8x8x4_timpl Sync for m128impl Sync for m128dimpl Sync for m128iimpl Sync for m256impl Sync for m256dimpl Sync for m256iimpl Sync for nxv2i16impl Sync for nxv2i32impl Sync for nxv2i8impl Sync for nxv2u16impl Sync for nxv2u32impl Sync for nxv2u8impl Sync for nxv4i16impl Sync for nxv4i8impl Sync for nxv4u16impl Sync for nxv4u8impl Sync for nxv8i8impl Sync for nxv8u8impl Sync for objc_classimpl Sync for objc_selectorimpl Sync for poly16x4_timpl Sync for poly16x4x2_timpl Sync for poly16x4x3_timpl Sync for poly16x4x4_timpl Sync for poly16x8_timpl Sync for poly16x8x2_timpl Sync for poly16x8x3_timpl Sync for poly16x8x4_timpl Sync for poly64x1_timpl Sync for poly64x1x2_timpl Sync for poly64x1x3_timpl Sync for poly64x1x4_timpl Sync for poly64x2_timpl Sync for poly64x2x2_timpl Sync for poly64x2x3_timpl Sync for poly64x2x4_timpl Sync for poly8x16_timpl Sync for poly8x16x2_timpl Sync for poly8x16x3_timpl Sync for poly8x16x4_timpl Sync for poly8x8_timpl Sync for poly8x8x2_timpl Sync for poly8x8x3_timpl Sync for poly8x8x4_timpl Sync for svbool2_timpl Sync for svbool4_timpl Sync for svbool8_timpl Sync for svbool_timpl Sync for svfloat32_timpl Sync for svfloat32x2_timpl Sync for svfloat32x3_timpl Sync for svfloat32x4_timpl Sync for svfloat64_timpl Sync for svfloat64x2_timpl Sync for svfloat64x3_timpl Sync for svfloat64x4_timpl Sync for svint16_timpl Sync for svint16x2_timpl Sync for svint16x3_timpl Sync for svint16x4_timpl Sync for svint32_timpl Sync for svint32x2_timpl Sync for svint32x3_timpl Sync for svint32x4_timpl Sync for svint64_timpl Sync for svint64x2_timpl Sync for svint64x3_timpl Sync for svint64x4_timpl Sync for svint8_timpl Sync for svint8x2_timpl Sync for svint8x3_timpl Sync for svint8x4_timpl Sync for svpatternimpl Sync for svprfopimpl Sync for svuint16_timpl Sync for svuint16x2_timpl Sync for svuint16x3_timpl Sync for svuint16x4_timpl Sync for svuint32_timpl Sync for svuint32x2_timpl Sync for svuint32x3_timpl Sync for svuint32x4_timpl Sync for svuint64_timpl Sync for svuint64x2_timpl Sync for svuint64x3_timpl Sync for svuint64x4_timpl Sync for svuint8_timpl Sync for svuint8x2_timpl Sync for svuint8x3_timpl Sync for svuint8x4_timpl Sync for uint16x4_timpl Sync for uint16x4x2_timpl Sync for uint16x4x3_timpl Sync for uint16x4x4_timpl Sync for uint16x8_timpl Sync for uint16x8x2_timpl Sync for uint16x8x3_timpl Sync for uint16x8x4_timpl Sync for uint32x2_timpl Sync for uint32x2x2_timpl Sync for uint32x2x3_timpl Sync for uint32x2x4_timpl Sync for uint32x4_timpl Sync for uint32x4x2_timpl Sync for uint32x4x3_timpl Sync for uint32x4x4_timpl Sync for uint64x1_timpl Sync for uint64x1x2_timpl Sync for uint64x1x3_timpl Sync for uint64x1x4_timpl Sync for uint64x2_timpl Sync for uint64x2x2_timpl Sync for uint64x2x3_timpl Sync for uint64x2x4_timpl Sync for uint8x16_timpl Sync for uint8x16x2_timpl Sync for uint8x16x3_timpl Sync for uint8x16x4_timpl Sync for uint8x8_timpl Sync for uint8x8x2_timpl Sync for uint8x8x3_timpl Sync for uint8x8x4_timpl Sync for v128impl Sync for vector_bool_charimpl Sync for vector_bool_charimpl Sync for vector_bool_intimpl Sync for vector_bool_intimpl Sync for vector_bool_longimpl Sync for vector_bool_long_longimpl Sync for vector_bool_shortimpl Sync for vector_bool_shortimpl Sync for vector_doubleimpl Sync for vector_doubleimpl Sync for vector_floatimpl Sync for vector_floatimpl Sync for vector_signed_charimpl Sync for vector_signed_charimpl Sync for vector_signed_intimpl Sync for vector_signed_intimpl Sync for vector_signed_longimpl Sync for vector_signed_long_longimpl Sync for vector_signed_shortimpl Sync for vector_signed_shortimpl Sync for vector_unsigned_charimpl Sync for vector_unsigned_charimpl Sync for vector_unsigned_intimpl Sync for vector_unsigned_intimpl Sync for vector_unsigned_longimpl Sync for vector_unsigned_long_longimpl Sync for vector_unsigned_shortimpl Sync for vector_unsigned_shortimpl<'a> !Sync for Argument<'a>impl<'a> !Sync for ArgumentType<'a>impl<'a> !Sync for Context<'a>impl<'a> !Sync for ContextBuilder<'a>impl<'a> !Sync for ExtData<'a>impl<'a> !Sync for Formatter<'a>impl<'a> !Sync for IoSlice<'a>impl<'a> !Sync for IoSliceMut<'a>impl<'a> !Sync for PanicInfo<'a>impl<'a> !Sync for PanicMessage<'a>impl<'a> !Sync for Request<'a>impl<'a> !Sync for Source<'a>impl<'a> !Sync for VaList<'a>impl<'a> Sync for Bytes<'a>impl<'a> Sync for CharIndices<'a>impl<'a> Sync for CharSearcher<'a>impl<'a> Sync for Chars<'a>impl<'a> Sync for Debug<'a>impl<'a> Sync for DisplayBuffer<'a>impl<'a> Sync for EncodeUtf16<'a>impl<'a> Sync for EscapeAscii<'a>impl<'a> Sync for EscapeDebug<'a>impl<'a> Sync for EscapeDefault<'a>impl<'a> Sync for EscapeUnicode<'a>impl<'a> Sync for Formatted<'a>impl<'a> Sync for IoSlice<'a>impl<'a> Sync for IoSliceMut<'a>impl<'a> Sync for Lines<'a>impl<'a> Sync for LinesAny<'a>impl<'a> Sync for Parser<'a>impl<'a> Sync for Part<'a>impl<'a> Sync for PhantomContravariantLifetime<'a>impl<'a> Sync for PhantomCovariantLifetime<'a>impl<'a> Sync for PhantomInvariantLifetime<'a>impl<'a> Sync for SplitAsciiWhitespace<'a>impl<'a> Sync for SplitAsciiWhitespace<'a>impl<'a> Sync for SplitWhitespace<'a>impl<'a> Sync for Utf8Chunk<'a>impl<'a> Sync for Utf8Chunks<'a>impl<'a> Sync for Utf8Pattern<'a>impl<'a, 'b> !Sync for DebugInner<'a, 'b>impl<'a, 'b> !Sync for DebugList<'a, 'b>impl<'a, 'b> !Sync for DebugMap<'a, 'b>impl<'a, 'b> !Sync for DebugSet<'a, 'b>impl<'a, 'b> !Sync for DebugStruct<'a, 'b>impl<'a, 'b> !Sync for DebugTuple<'a, 'b>impl<'a, 'b> Sync for CharSliceSearcher<'a, 'b>impl<'a, 'b> Sync for StrSearcher<'a, 'b>impl<'a, 'b, const N: usize> Sync for CharArrayRefSearcher<'a, 'b, N> where <MultiCharEqPattern<&'b [char; N]> as Pattern>::Searcher<'a>: Sync,impl<'a, A> Sync for Iter<'a, A> where Item<&'a A>: Sync,impl<'a, A> Sync for IterMut<'a, A> where Item<&'a mut A>: Sync,impl<'a, C> Sync for MultiCharEqSearcher<'a, C> where C: Sync,impl<'a, F> Sync for CharPredicateSearcher<'a, F> where <MultiCharEqPattern<F> as Pattern>::Searcher<'a>: Sync,impl<'a, I> Sync for ByRefSized<'a, I> where &'a mut I: Sync,impl<'a, I> Sync for TaggedOption<'a, I> where Option<<I as Type<'a>>::Reified>: Sync,impl<'a, I, R> Sync for GenericShunt<'a, I, R> where I: Sync, &'a mut Option<R>: Sync,impl<'a, P> Sync for MatchIndices<'a, P> where MatchIndicesInternal<'a, P>: Sync,impl<'a, P> Sync for MatchIndicesInternal<'a, P> where <P as Pattern>::Searcher<'a>: Sync,impl<'a, P> Sync for Matches<'a, P> where MatchesInternal<'a, P>: Sync,impl<'a, P> Sync for MatchesInternal<'a, P> where <P as Pattern>::Searcher<'a>: Sync,impl<'a, P> Sync for RMatchIndices<'a, P> where MatchIndicesInternal<'a, P>: Sync,impl<'a, P> Sync for RMatches<'a, P> where MatchesInternal<'a, P>: Sync,impl<'a, P> Sync for RSplit<'a, P> where SplitInternal<'a, P>: Sync,impl<'a, P> Sync for RSplitN<'a, P> where SplitNInternal<'a, P>: Sync,impl<'a, P> Sync for RSplitTerminator<'a, P> where SplitInternal<'a, P>: Sync,impl<'a, P> Sync for Split<'a, P> where SplitInternal<'a, P>: Sync,impl<'a, P> Sync for SplitInclusive<'a, P> where SplitInternal<'a, P>: Sync,impl<'a, P> Sync for SplitInternal<'a, P> where <P as Pattern>::Searcher<'a>: Sync,impl<'a, P> Sync for SplitN<'a, P> where SplitNInternal<'a, P>: Sync,impl<'a, P> Sync for SplitNInternal<'a, P> where SplitInternal<'a, P>: Sync,impl<'a, P> Sync for SplitTerminator<'a, P> where SplitInternal<'a, P>: Sync,impl<'a, T> !Sync for BorrowedCursor<'a, T>impl<'a, T> Sync for Chunks<'a, T> where &'a [T]: Sync,impl<'a, T> Sync for ChunksExact<'a, T> where &'a [T]: Sync + Sync,impl<'a, T> Sync for Guard<'a, T> where &'a mut [MaybeUninit<T>]: Sync,impl<'a, T> Sync for Guard<'a, T> where &'a mut [MaybeUninit<T>]: Sync,impl<'a, T> Sync for GuardBack<'a, T> where &'a mut [MaybeUninit<T>]: Sync,impl<'a, T> Sync for InitializingSlice<'a, T> where &'a mut [MaybeUninit<T>]: Sync,impl<'a, T> Sync for Iter<'a, T> where Option<&'a T>: Sync,impl<'a, T> Sync for IterMut<'a, T> where Option<&'a mut T>: Sync,impl<'a, T> Sync for RChunks<'a, T> where &'a [T]: Sync,impl<'a, T> Sync for RChunksExact<'a, T> where &'a [T]: Sync + Sync,impl<'a, T> Sync for Windows<'a, T> where &'a [T]: Sync,impl<'a, T, P> Sync for ChunkBy<'a, T, P> where &'a [T]: Sync, P: Sync,impl<'a, T, P> Sync for ChunkByMut<'a, T, P> where &'a mut [T]: Sync, P: Sync,impl<'a, T, P> Sync for RSplit<'a, T, P> where Split<'a, T, P>: Sync,impl<'a, T, P> Sync for RSplitMut<'a, T, P> where SplitMut<'a, T, P>: Sync,impl<'a, T, P> Sync for RSplitN<'a, T, P> where GenericSplitN<RSplit<'a, T, P>>: Sync,impl<'a, T, P> Sync for RSplitNMut<'a, T, P> where GenericSplitN<RSplitMut<'a, T, P>>: Sync,impl<'a, T, P> Sync for Split<'a, T, P> where &'a [T]: Sync, P: Sync,impl<'a, T, P> Sync for SplitInclusive<'a, T, P> where &'a [T]: Sync, P: Sync,impl<'a, T, P> Sync for SplitInclusiveMut<'a, T, P> where &'a mut [T]: Sync, P: Sync,impl<'a, T, P> Sync for SplitMut<'a, T, P> where &'a mut [T]: Sync, P: Sync,impl<'a, T, P> Sync for SplitN<'a, T, P> where GenericSplitN<Split<'a, T, P>>: Sync,impl<'a, T, P> Sync for SplitNMut<'a, T, P> where GenericSplitN<SplitMut<'a, T, P>>: Sync,impl<'a, T, const N: usize> Sync for ArrayWindows<'a, T, N> where &'a [T]: Sync,impl<'a, const N: usize> Sync for CharArraySearcher<'a, N> where <MultiCharEqPattern<[char; N]> as Pattern>::Searcher<'a>: Sync,impl<'b> !Sync for BorrowRef<'b>impl<'b> !Sync for BorrowRefMut<'b>impl<'b, T> !Sync for Ref<'b, T>impl<'b, T> !Sync for RefMut<'b, T>impl<'buf, 'state> !Sync for PadAdapter<'buf, 'state>impl<'data, T> Sync for BorrowedBuf<'data, T> where &'data mut [MaybeUninit<T>]: Sync,impl<'l, 'f, T, F> !Sync for Drain<'l, 'f, T, F>impl<A> Sync for IntoIter<A> where Item<A>: Sync,impl<A> Sync for Item<A> where Option<A>: Sync,impl<A> Sync for OptionFlatten<A> where Option<A>: Sync,impl<A> Sync for RangeFromIter<A> where A: Sync,impl<A> Sync for RangeInclusiveIter<A> where RangeInclusive<A>: Sync,impl<A> Sync for RangeIter<A> where Range<A>: Sync,impl<A> Sync for Repeat<A> where A: Sync,impl<A> Sync for RepeatN<A> where Option<RepeatNInner<A>>: Sync,impl<A, B> Sync for Chain<A, B> where Option<A>: Sync, Option<B>: Sync,impl<A, B> Sync for Zip<A, B> where A: Sync, B: Sync,impl<B, C> Sync for ControlFlow<B, C> where C: Sync, B: Sync,impl<C> Sync for ErrorData<C> where C: Sync,impl<C> Sync for MultiCharEqPattern<C> where C: Sync,impl<DATA> Sync for PolymorphicIter<DATA> where DATA: Sync + ?Sized,impl<Dyn: PointeeSized> Sync for DynMetadata<Dyn>impl<E> Sync for Tagged<E> where E: Sync + ?Sized,impl<E, M> Sync for Capture<E, M> where Option<E>: Sync, PhantomData<M>: Sync,impl<F> !Sync for DebugOnce<F>impl<F> Sync for FromFn<F> where F: Sync,impl<F> Sync for FromFn<F> where F: Sync,impl<F> Sync for MaybeDone<F> where F: Sync, <F as Future>::Output: Sync,impl<F> Sync for OnceWith<F> where Option<F>: Sync,impl<F> Sync for PollFn<F> where F: Sync,impl<F> Sync for RepeatWith<F> where F: Sync,impl<G> Sync for FromCoroutine<G> where G: Sync,impl<H> Sync for BuildHasherDefault<H> where PhantomData<fn() -> H>: Sync,impl<I> Sync for Cloned<I> where I: Sync,impl<I> Sync for Copied<I> where I: Sync,impl<I> Sync for Cycle<I> where I: Sync + Sync,impl<I> Sync for DecodeUtf16<I> where I: Sync,impl<I> Sync for Enumerate<I> where I: Sync,impl<I> Sync for Flatten<I> where FlattenCompat<I, <<I as Iterator>::Item as IntoIterator>::IntoIter>: Sync,impl<I> Sync for FromIter<I> where I: Sync,impl<I> Sync for Fuse<I> where Option<I>: Sync,impl<I> Sync for GenericSplitN<I> where I: Sync,impl<I> Sync for Intersperse<I> where <I as Iterator>::Item: Sized + Sync, Option<<I as Iterator>::Item>: Sync, I: Sync,impl<I> Sync for Peekable<I> where I: Sync, Option<Option<<I as Iterator>::Item>>: Sync,impl<I> Sync for Ref<I> where PhantomData<I>: Sync,impl<I> Sync for Skip<I> where I: Sync,impl<I> Sync for StepBy<I> where I: Sync,impl<I> Sync for Take<I> where I: Sync,impl<I, F> Sync for FilterMap<I, F> where I: Sync, F: Sync,impl<I, F> Sync for Inspect<I, F> where I: Sync, F: Sync,impl<I, F> Sync for Map<I, F> where I: Sync, F: Sync,impl<I, F, const N: usize> Sync for MapWindows<I, F, N> where F: Sync, MapWindowsInner<I, N>: Sync,impl<I, G> Sync for IntersperseWith<I, G> where G: Sync, Option<<I as Iterator>::Item>: Sync, I: Sync,impl<I, P> Sync for Filter<I, P> where I: Sync, P: Sync,impl<I, P> Sync for MapWhile<I, P> where I: Sync, P: Sync,impl<I, P> Sync for SkipWhile<I, P> where I: Sync, P: Sync,impl<I, P> Sync for TakeWhile<I, P> where I: Sync, P: Sync,impl<I, St, F> Sync for Scan<I, St, F> where I: Sync, F: Sync, St: Sync,impl<I, U> Sync for FlattenCompat<I, U> where Fuse<I>: Sync, Option<U>: Sync + Sync,impl<I, U, F> Sync for FlatMap<I, U, F> where FlattenCompat<Map<I, F>, <U as IntoIterator>::IntoIter>: Sync,impl<I, const N: usize> Sync for ArrayChunks<I, N> where I: Sync, Option<IntoIter<<I as Iterator>::Item, N>>: Sync,impl<I, const N: usize> Sync for MapWindowsInner<I, N> where I: Sync, Option<Buffer<<I as Iterator>::Item, N>>: Sync,impl<Idx> Sync for Clamp<Idx> where Idx: Sync,impl<Idx> Sync for Range<Idx> where Idx: Sync + Sync,impl<Idx> Sync for Range<Idx> where Idx: Sync + Sync,impl<Idx> Sync for RangeFrom<Idx> where Idx: Sync,impl<Idx> Sync for RangeFrom<Idx> where Idx: Sync,impl<Idx> Sync for RangeInclusive<Idx> where Idx: Sync + Sync,impl<Idx> Sync for RangeInclusive<Idx> where Idx: Sync + Sync,impl<Idx> Sync for RangeTo<Idx> where Idx: Sync,impl<Idx> Sync for RangeToInclusive<Idx> where Idx: Sync,impl<Idx> Sync for RangeToInclusive<Idx> where Idx: Sync,impl<K, V> Sync for KeyAndValue<K, V> where K: Sync, V: Sync,impl<P> Sync for MaybeDangling<P> where P: Sync + ?Sized,impl<Ptr> Sync for Pin<Ptr> where Ptr: Sync,impl<Ptr> Sync for PinHelper<Ptr> where Ptr: Sync,impl<S> Sync for Hasher<S> where PhantomData<S>: Sync,impl<T> !Sync for CopyOnDrop<T>impl<T> !Sync for GapGuard<T>impl<T> !Sync for GapGuardRaw<T>impl<T> !Sync for MergeState<T>impl<T> !Sync for OnceCell<T>impl<T> !Sync for PartitionState<T>impl<T> !Sync for PartitionState<T>impl<T> Sync for Align1<T> where T: Sync,impl<T> Sync for Align16<T> where T: Sync,impl<T> Sync for Align2<T> where T: Sync,impl<T> Sync for Align4<T> where T: Sync,impl<T> Sync for Align8<T> where T: Sync,impl<T> Sync for AssertUnwindSafe<T> where T: Sync,impl<T> Sync for Bound<T> where T: Sync + Sync,impl<T> Sync for ChunksExactMut<'_, T> where T: Sync,impl<T> Sync for ChunksMut<'_, T> where T: Sync,impl<T> Sync for Complex<T> where T: Sync + Sync,impl<T> Sync for Cursor<T> where T: Sync,impl<T> Sync for Discriminant<T> where <T as DiscriminantKind>::Discriminant: Sync,impl<T> Sync for Empty<T> where PhantomData<fn() -> T>: Sync,impl<T> Sync for IntoIter<T> where Option<T>: Sync,impl<T> Sync for ManuallyDrop<T> where MaybeDangling<T>: Sync, T: ?Sized,impl<T> Sync for MaybeSizedValue<T> where PhantomData<T>: Sync, T: ?Sized,impl<T> Sync for MaybeUninit<T> where ManuallyDrop<T>: Sync,impl<T> Sync for NeverShortCircuit<T> where T: Sync,impl<T> Sync for NonZero<T> where T: ZeroablePrimitive + Sync,impl<T> Sync for NumBuffer<T> where <T as NumBufferTrait>::Buf: Sync, PhantomData<T>: Sync,impl<T> Sync for Once<T> where IntoIter<T>: Sync,impl<T> Sync for Option<T> where T: Sync,impl<T> Sync for Pending<T> where PhantomData<fn() -> T>: Sync,impl<T> Sync for PhantomContravariant<T> where PhantomData<fn(T)>: Sync, T: ?Sized,impl<T> Sync for PhantomCovariant<T> where PhantomData<fn() -> T>: Sync, T: ?Sized,impl<T> Sync for PhantomData<T> where T: ?Sized,impl<T> Sync for PhantomInvariant<T> where PhantomData<fn(T) -> T>: Sync, T: ?Sized,impl<T> Sync for Poll<T> where T: Sync,impl<T> Sync for RChunksExactMut<'_, T> where T: Sync,impl<T> Sync for RChunksMut<'_, T> where T: Sync,impl<T> Sync for Ready<T> where Option<T>: Sync,impl<T> Sync for RepeatNInner<T> where T: Sync,impl<T> Sync for Rev<T> where T: Sync,impl<T> Sync for Reverse<T> where T: Sync,impl<T> Sync for Saturating<T> where T: Sync,impl<T> Sync for Take<T> where T: Sync,impl<T> Sync for TraitImpl<T> where DynMetadata<T>: Sync, T: ?Sized,impl<T> Sync for Unaligned<T> where T: Sync,impl<T> Sync for Value<T> where PhantomData<T>: Sync,impl<T> Sync for Wrapper<T> where T: Sync,impl<T> Sync for Wrapping<T> where T: Sync,impl<T> Sync for Yeet<T> where T: Sync,impl<T, E> Sync for Result<T, E> where T: Sync, E: Sync,impl<T, F = fn() -> T> !Sync for LazyCell<T, F>impl<T, F> Sync for DropGuard<T, F> where ManuallyDrop<T>: Sync, ManuallyDrop<F>: Sync,impl<T, F> Sync for State<T, F> where F: Sync, T: Sync,impl<T, F> Sync for Successors<T, F> where Option<T>: Sync, F: Sync,impl<T, U> Sync for Chain<T, U> where T: Sync, U: Sync,impl<T, U> Sync for PackedTuple<T, U> where T: Sync, U: Sync,impl<T, const N: usize> Sync for AlignedStorage<T, N> where [T; 0]: Sync, [MaybeUninit<u8>; N]: Sync,impl<T, const N: usize> Sync for Buffer<T, N> where [[MaybeUninit<T>; N]; 2]: Sync,impl<T, const N: usize> Sync for IntoIter<T, N> where ManuallyDrop<PolymorphicIter<[MaybeUninit<T>; N]>>: Sync,impl<T, const N: usize> Sync for Mask<T, N> where Simd<T, N>: Sync,impl<T, const N: usize> Sync for Simd<T, N> where [T; N]: Sync,impl<T, const N: usize> Sync for Simd<T, N> where [T; N]: Sync,impl<T, const N: usize> Sync for SimdM<T, N> where [T; N]: Sync,impl<T, const VARIANT: u32, const FIELD: u32> Sync for FieldRepresentingType<T, VARIANT, FIELD> where PhantomData<fn(T) -> T>: Sync, T: ?Sized,impl<T: ?Sized + Sync> Sync for SyncUnsafeCell<T>impl<T: ?Sized + Sync> Sync for UnsafePinned<T>impl<T: ?Sized> !Sync for Cell<T>impl<T: ?Sized> !Sync for CovariantUnsafeCell<T>impl<T: ?Sized> !Sync for RefCell<T>impl<T: ?Sized> !Sync for UnsafeCell<T>impl<T: ?Sized> Sync for SyncView<T>impl<T: AtomicPrimitive> Sync for Atomic<T>impl<T: PointeeSized> !Sync for *const Timpl<T: PointeeSized> !Sync for *mut Timpl<T: PointeeSized> !Sync for NonNull<T>impl<T: Sync + PointeeSized> Sync for Unique<T>impl<T: Sync> Sync for Iter<'_, T>impl<T: Sync> Sync for IterMut<'_, T>impl<Y, R> Sync for CoroutineState<Y, R> where Y: Sync, R: Sync,impl<const LEN: usize> Sync for SimdShuffleIdx<LEN> where [u32; LEN]: Sync,impl<const N: usize> Sync for MaybeEscapedCharacter<N> where [AsciiChar; N]: Sync,impl<const N: usize> Sync for ReverseMask<N> where [u32; N]: Sync,impl<const N: usize> Sync for ShuffleMask<N> where [u32; N]: Sync,impl<const N: usize, ESCAPING> Sync for EscapeIterInner<N, ESCAPING> where MaybeEscapedCharacter<N>: Sync, PhantomData<ESCAPING>: Sync,