pub unsafe auto trait Sync { }
๐Ÿ”ฌThis is a nightly-only experimental API. (prelude_future)
Expand description

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:

  • &T is Send if and only if T is Sync
  • &mut T is Send if and only if T is Send
  • &T and &mut T are Sync if and only if T is Sync

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ยง

1.26.0 ยท Sourceยง

impl !Sync for Args

1.26.0 ยท Sourceยง

impl !Sync for ArgsOs

1.0.0 ยท Sourceยง

impl !Sync for Arguments<'_>

Sourceยง

impl !Sync for LocalWaker

Sourceยง

impl Sync for core::ffi::c_str::Bytes<'_>

Sourceยง

impl Sync for ResumeTy

1.6.0 ยท Sourceยง

impl Sync for rustc_std_workspace_std::string::Drain<'_>

1.0.0 ยท Sourceยง

impl Sync for AtomicBool

1.34.0 ยท Sourceยง

impl Sync for AtomicI8

1.34.0 ยท Sourceยง

impl Sync for AtomicI16

1.34.0 ยท Sourceยง

impl Sync for AtomicI32

1.34.0 ยท Sourceยง

impl Sync for AtomicI64

1.0.0 ยท Sourceยง

impl Sync for AtomicIsize

1.34.0 ยท Sourceยง

impl Sync for AtomicU8

1.34.0 ยท Sourceยง

impl Sync for AtomicU16

1.34.0 ยท Sourceยง

impl Sync for AtomicU32

1.34.0 ยท Sourceยง

impl Sync for AtomicU64

1.0.0 ยท Sourceยง

impl Sync for AtomicUsize

1.36.0 ยท Sourceยง

impl Sync for Waker

1.44.0 ยท Sourceยง

impl<'a> Sync for IoSlice<'a>

1.44.0 ยท Sourceยง

impl<'a> Sync for IoSliceMut<'a>

Sourceยง

impl<Dyn> Sync for DynMetadata<Dyn>
where Dyn: ?Sized,

1.0.0 ยท Sourceยง

impl<T> !Sync for *const T
where T: ?Sized,

1.0.0 ยท Sourceยง

impl<T> !Sync for *mut T
where T: ?Sized,

1.0.0 ยท Sourceยง

impl<T> !Sync for Cell<T>
where T: ?Sized,

1.70.0 ยท Sourceยง

impl<T> !Sync for OnceCell<T>

1.0.0 ยท Sourceยง

impl<T> !Sync for RefCell<T>
where T: ?Sized,

1.0.0 ยท Sourceยง

impl<T> !Sync for UnsafeCell<T>
where T: ?Sized,

1.25.0 ยท Sourceยง

impl<T> !Sync for NonNull<T>
where T: ?Sized,

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

1.0.0 ยท Sourceยง

impl<T> !Sync for rustc_std_workspace_std::sync::mpsc::Receiver<T>

Sourceยง

impl<T> Sync for ThinBox<T>
where T: Sync + ?Sized,

ThinBox<T> is Sync if T is Sync because the data is owned.

Sourceยง

impl<T> Sync for SyncUnsafeCell<T>
where T: Sync + ?Sized,

1.0.0 ยท Sourceยง

impl<T> Sync for rustc_std_workspace_std::collections::linked_list::Iter<'_, T>
where T: Sync,

1.0.0 ยท Sourceยง

impl<T> Sync for rustc_std_workspace_std::collections::linked_list::IterMut<'_, T>
where T: Sync,

1.28.0 ยท Sourceยง

impl<T> Sync for NonZero<T>

Sourceยง

impl<T> Sync for Unique<T>
where T: Sync + ?Sized,

Unique pointers are Sync if T is Sync because the data they reference is unaliased. Note that this aliasing invariant is unenforced by the type system; the abstraction using the Unique must enforce it.

1.31.0 ยท Sourceยง

impl<T> Sync for ChunksExactMut<'_, T>
where T: Sync,

1.0.0 ยท Sourceยง

impl<T> Sync for ChunksMut<'_, T>
where T: Sync,

1.0.0 ยท Sourceยง

impl<T> Sync for rustc_std_workspace_std::slice::Iter<'_, T>
where T: Sync,

1.0.0 ยท Sourceยง

impl<T> Sync for rustc_std_workspace_std::slice::IterMut<'_, T>
where T: Sync,

1.31.0 ยท Sourceยง

impl<T> Sync for RChunksExactMut<'_, T>
where T: Sync,

1.31.0 ยท Sourceยง

impl<T> Sync for RChunksMut<'_, T>
where T: Sync,

1.0.0 ยท Sourceยง

impl<T> Sync for AtomicPtr<T>

Sourceยง

impl<T> Sync for rustc_std_workspace_std::sync::mpmc::Receiver<T>
where T: Send,

Sourceยง

impl<T> Sync for rustc_std_workspace_std::sync::mpmc::Sender<T>
where T: Send,

1.72.0 ยท Sourceยง

impl<T> Sync for rustc_std_workspace_std::sync::mpsc::Sender<T>
where T: Send,

Sourceยง

impl<T> Sync for Exclusive<T>
where T: ?Sized,

Sourceยง

impl<T> Sync for MappedMutexGuard<'_, T>
where T: Sync + ?Sized,

Sourceยง

impl<T> Sync for MappedRwLockReadGuard<'_, T>
where T: Sync + ?Sized,

Sourceยง

impl<T> Sync for MappedRwLockWriteGuard<'_, T>
where T: Sync + ?Sized,

1.0.0 ยท Sourceยง

impl<T> Sync for Mutex<T>
where T: Send + ?Sized,

T must be Send for Mutex to be Sync. This ensures that the protected data can be accessed safely from multiple threads without causing data races or other unsafe behavior.

Mutex<T> provides mutable access to T to one thread at a time. However, itโ€™s essential for T to be Send because itโ€™s not safe for non-Send structures to be accessed in this manner. For instance, consider Rc, a non-atomic reference counted smart pointer, which is not Send. With Rc, we can have multiple copies pointing to the same heap allocation with a non-atomic reference count. If we were to use Mutex<Rc<_>>, it would only protect one instance of Rc from shared access, leaving other copies vulnerable to potential data races.

Also note that it is not necessary for T to be Sync as &T is only made available to one thread at a time if T is not Sync.

1.19.0 ยท Sourceยง

impl<T> Sync for MutexGuard<'_, T>
where T: Sync + ?Sized,

T must be Sync for a MutexGuard<T> to be Sync because it is possible to get a &T from &MutexGuard (via Deref).

1.70.0 ยท Sourceยง

impl<T> Sync for OnceLock<T>
where T: Sync + Send,

Sourceยง

impl<T> Sync for ReentrantLock<T>
where T: Send + ?Sized,

Sourceยง

impl<T> Sync for ReentrantLockGuard<'_, T>
where T: Sync + ?Sized,

1.0.0 ยท Sourceยง

impl<T> Sync for RwLock<T>
where T: Send + Sync + ?Sized,

1.23.0 ยท Sourceยง

impl<T> Sync for RwLockReadGuard<'_, T>
where T: Sync + ?Sized,

1.23.0 ยท Sourceยง

impl<T> Sync for RwLockWriteGuard<'_, T>
where T: Sync + ?Sized,

1.29.0 ยท Sourceยง

impl<T> Sync for JoinHandle<T>

1.0.0 ยท Sourceยง

impl<T, A> !Sync for Rc<T, A>
where A: Allocator, T: ?Sized,

Sourceยง

impl<T, A> !Sync for UniqueRc<T, A>
where A: Allocator, T: ?Sized,

1.4.0 ยท Sourceยง

impl<T, A> !Sync for rustc_std_workspace_std::rc::Weak<T, A>
where A: Allocator, T: ?Sized,

Sourceยง

impl<T, A> Sync for rustc_std_workspace_std::collections::linked_list::Cursor<'_, T, A>
where T: Sync, A: Allocator + Sync,

Sourceยง

impl<T, A> Sync for rustc_std_workspace_std::collections::linked_list::CursorMut<'_, T, A>
where T: Sync, A: Allocator + Sync,

1.0.0 ยท Sourceยง

impl<T, A> Sync for LinkedList<T, A>
where T: Sync, A: Allocator + Sync,

1.6.0 ยท Sourceยง

impl<T, A> Sync for rustc_std_workspace_std::collections::vec_deque::Drain<'_, T, A>
where T: Sync, A: Allocator + Sync,

1.0.0 ยท Sourceยง

impl<T, A> Sync for Arc<T, A>
where T: Sync + Send + ?Sized, A: Allocator + Sync,

Sourceยง

impl<T, A> Sync for UniqueArc<T, A>
where T: Sync + Send + ?Sized, A: Allocator + Sync,

1.4.0 ยท Sourceยง

impl<T, A> Sync for rustc_std_workspace_std::sync::Weak<T, A>
where T: Sync + Send + ?Sized, A: Allocator + Sync,

1.6.0 ยท Sourceยง

impl<T, A> Sync for rustc_std_workspace_std::vec::Drain<'_, T, A>
where T: Sync, A: Sync + Allocator,

1.0.0 ยท Sourceยง

impl<T, A> Sync for rustc_std_workspace_std::vec::IntoIter<T, A>
where T: Sync, A: Allocator + Sync,

1.80.0 ยท Sourceยง

impl<T, F> Sync for LazyLock<T, F>
where T: Sync + Send, F: Send,

Auto implementorsยง

ยง

impl !Sync for Vars

ยง

impl !Sync for VarsOs

ยง

impl !Sync for OnceState

ยง

impl !Sync for RawWaker

ยง

impl Sync for AsciiChar

ยง

impl Sync for BacktraceStatus

ยง

impl Sync for rustc_std_workspace_std::cmp::Ordering

ยง

impl Sync for TryReserveErrorKind

ยง

impl Sync for Infallible

ยง

impl Sync for VarError

ยง

impl Sync for FromBytesWithNulError

ยง

impl Sync for c_void

ยง

impl Sync for rustc_std_workspace_std::fmt::Alignment

ยง

impl Sync for DebugAsHex

ยง

impl Sync for Sign

ยง

impl Sync for rustc_std_workspace_std::fs::TryLockError

ยง

impl Sync for BasicBlock

ยง

impl Sync for UnwindTerminateReason

ยง

impl Sync for ErrorKind

ยง

impl Sync for SeekFrom

ยง

impl Sync for IpAddr

ยง

impl Sync for Ipv6MulticastScope

ยง

impl Sync for Shutdown

ยง

impl Sync for rustc_std_workspace_std::net::SocketAddr

ยง

impl Sync for FpCategory

ยง

impl Sync for IntErrorKind

ยง

impl Sync for OneSidedRangeBound

ยง

impl Sync for AncillaryError

ยง

impl Sync for BacktraceStyle

ยง

impl Sync for GetDisjointMutError

ยง

impl Sync for SearchStep

ยง

impl Sync for rustc_std_workspace_std::sync::atomic::Ordering

ยง

impl Sync for RecvTimeoutError

ยง

impl Sync for TryRecvError

ยง

impl Sync for AllocError

ยง

impl Sync for Global

ยง

impl Sync for Layout

ยง

impl Sync for LayoutError

ยง

impl Sync for System

ยง

impl Sync for TypeId

ยง

impl Sync for CpuidResult

ยง

impl Sync for __m128

ยง

impl Sync for __m128bh

ยง

impl Sync for __m128d

ยง

impl Sync for __m128h

ยง

impl Sync for __m128i

ยง

impl Sync for __m256

ยง

impl Sync for __m256bh

ยง

impl Sync for __m256d

ยง

impl Sync for __m256h

ยง

impl Sync for __m256i

ยง

impl Sync for __m512

ยง

impl Sync for __m512bh

ยง

impl Sync for __m512d

ยง

impl Sync for __m512h

ยง

impl Sync for __m512i

ยง

impl Sync for bf16

ยง

impl Sync for TryFromSliceError

ยง

impl Sync for rustc_std_workspace_std::ascii::EscapeDefault

ยง

impl Sync for Backtrace

ยง

impl Sync for BacktraceFrame

ยง

impl Sync for ByteStr

ยง

impl Sync for ByteString

ยง

impl Sync for BorrowError

ยง

impl Sync for BorrowMutError

ยง

impl Sync for CharTryFromError

ยง

impl Sync for DecodeUtf16Error

ยง

impl Sync for rustc_std_workspace_std::char::EscapeDebug

ยง

impl Sync for rustc_std_workspace_std::char::EscapeDefault

ยง

impl Sync for rustc_std_workspace_std::char::EscapeUnicode

ยง

impl Sync for ParseCharError

ยง

impl Sync for ToLowercase

ยง

impl Sync for ToUppercase

ยง

impl Sync for TryFromCharError

ยง

impl Sync for UnorderedKeyError

ยง

impl Sync for TryReserveError

ยง

impl Sync for JoinPathsError

ยง

impl Sync for CStr

ยง

impl Sync for CString

ยง

impl Sync for FromBytesUntilNulError

ยง

impl Sync for FromVecWithNulError

ยง

impl Sync for IntoStringError

ยง

impl Sync for NulError

ยง

impl Sync for OsStr

ยง

impl Sync for OsString

ยง

impl Sync for rustc_std_workspace_std::fmt::Error

ยง

impl Sync for FormattingOptions

ยง

impl Sync for DirBuilder

ยง

impl Sync for DirEntry

ยง

impl Sync for File

ยง

impl Sync for FileTimes

ยง

impl Sync for FileType

ยง

impl Sync for Metadata

ยง

impl Sync for OpenOptions

ยง

impl Sync for Permissions

ยง

impl Sync for ReadDir

ยง

impl Sync for DefaultHasher

ยง

impl Sync for RandomState

ยง

impl Sync for SipHasher

ยง

impl Sync for ReturnToArg

ยง

impl Sync for UnwindActionArg

ยง

impl Sync for rustc_std_workspace_std::io::Empty

ยง

impl Sync for rustc_std_workspace_std::io::Error

ยง

impl Sync for PipeReader

ยง

impl Sync for PipeWriter

ยง

impl Sync for rustc_std_workspace_std::io::Repeat

ยง

impl Sync for Sink

ยง

impl Sync for Stderr

ยง

impl Sync for Stdin

ยง

impl Sync for Stdout

ยง

impl Sync for WriterPanicked

ยง

impl Sync for PhantomPinned

ยง

impl Sync for Assume

ยง

impl Sync for AddrParseError

ยง

impl Sync for IntoIncoming

ยง

impl Sync for Ipv4Addr

ยง

impl Sync for Ipv6Addr

ยง

impl Sync for SocketAddrV4

ยง

impl Sync for SocketAddrV6

ยง

impl Sync for TcpListener

ยง

impl Sync for TcpStream

ยง

impl Sync for UdpSocket

ยง

impl Sync for ParseFloatError

ยง

impl Sync for ParseIntError

ยง

impl Sync for TryFromIntError

ยง

impl Sync for RangeFull

ยง

impl Sync for OwnedFd

ยง

impl Sync for PidFd

ยง

impl Sync for stat

ยง

impl Sync for rustc_std_workspace_std::os::unix::net::SocketAddr

ยง

impl Sync for SocketCred

ยง

impl Sync for UCred

ยง

impl Sync for UnixDatagram

ยง

impl Sync for UnixListener

ยง

impl Sync for UnixStream

ยง

impl Sync for Path

ยง

impl Sync for PathBuf

ยง

impl Sync for StripPrefixError

ยง

impl Sync for Child

ยง

impl Sync for ChildStderr

ยง

impl Sync for ChildStdin

ยง

impl Sync for ChildStdout

ยง

impl Sync for Command

ยง

impl Sync for ExitCode

ยง

impl Sync for ExitStatus

ยง

impl Sync for ExitStatusError

ยง

impl Sync for Output

ยง

impl Sync for Stdio

ยง

impl Sync for rustc_std_workspace_std::ptr::Alignment

ยง

impl Sync for DefaultRandomSource

ยง

impl Sync for ParseBoolError

ยง

impl Sync for Utf8Error

ยง

impl Sync for FromUtf8Error

ยง

impl Sync for FromUtf16Error

ยง

impl Sync for IntoChars

ยง

impl Sync for String

ยง

impl Sync for RecvError

ยง

impl Sync for Barrier

ยง

impl Sync for BarrierWaitResult

ยง

impl Sync for Condvar

ยง

impl Sync for rustc_std_workspace_std::sync::Once

ยง

impl Sync for WaitTimeoutResult

ยง

impl Sync for RawWakerVTable

ยง

impl Sync for AccessError

ยง

impl Sync for Builder

ยง

impl Sync for Thread

ยง

impl Sync for ThreadId

ยง

impl Sync for Duration

ยง

impl Sync for Instant

ยง

impl Sync for SystemTime

ยง

impl Sync for SystemTimeError

ยง

impl Sync for TryFromFloatSecsError

ยง

impl<'a> !Sync for Request<'a>

ยง

impl<'a> !Sync for Formatter<'a>

ยง

impl<'a> !Sync for StderrLock<'a>

ยง

impl<'a> !Sync for StdoutLock<'a>

ยง

impl<'a> !Sync for PanicHookInfo<'a>

ยง

impl<'a> !Sync for Context<'a>

ยง

impl<'a> !Sync for ContextBuilder<'a>

ยง

impl<'a> Sync for AncillaryData<'a>

ยง

impl<'a> Sync for Component<'a>

ยง

impl<'a> Sync for Prefix<'a>

ยง

impl<'a> Sync for Utf8Pattern<'a>

ยง

impl<'a> Sync for SplitPaths<'a>

ยง

impl<'a> Sync for rustc_std_workspace_std::ffi::os_str::Display<'a>

ยง

impl<'a> Sync for BorrowedCursor<'a>

ยง

impl<'a> Sync for StdinLock<'a>

ยง

impl<'a> Sync for PhantomContravariantLifetime<'a>

ยง

impl<'a> Sync for PhantomCovariantLifetime<'a>

ยง

impl<'a> Sync for PhantomInvariantLifetime<'a>

ยง

impl<'a> Sync for rustc_std_workspace_std::net::Incoming<'a>

ยง

impl<'a> Sync for rustc_std_workspace_std::os::unix::net::Incoming<'a>

ยง

impl<'a> Sync for Messages<'a>

ยง

impl<'a> Sync for ScmCredentials<'a>

ยง

impl<'a> Sync for ScmRights<'a>

ยง

impl<'a> Sync for SocketAncillary<'a>

ยง

impl<'a> Sync for Location<'a>

ยง

impl<'a> Sync for Ancestors<'a>

ยง

impl<'a> Sync for Components<'a>

ยง

impl<'a> Sync for rustc_std_workspace_std::path::Display<'a>

ยง

impl<'a> Sync for rustc_std_workspace_std::path::Iter<'a>

ยง

impl<'a> Sync for PrefixComponent<'a>

ยง

impl<'a> Sync for CommandArgs<'a>

ยง

impl<'a> Sync for CommandEnvs<'a>

ยง

impl<'a> Sync for EscapeAscii<'a>

ยง

impl<'a> Sync for CharSearcher<'a>

ยง

impl<'a> Sync for rustc_std_workspace_std::str::Bytes<'a>

ยง

impl<'a> Sync for CharIndices<'a>

ยง

impl<'a> Sync for Chars<'a>

ยง

impl<'a> Sync for EncodeUtf16<'a>

ยง

impl<'a> Sync for rustc_std_workspace_std::str::EscapeDebug<'a>

ยง

impl<'a> Sync for rustc_std_workspace_std::str::EscapeDefault<'a>

ยง

impl<'a> Sync for rustc_std_workspace_std::str::EscapeUnicode<'a>

ยง

impl<'a> Sync for rustc_std_workspace_std::str::Lines<'a>

ยง

impl<'a> Sync for LinesAny<'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, '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>

ยง

impl<'a, 'f> !Sync for VaList<'a, 'f>

ยง

impl<'a, A> Sync for rustc_std_workspace_std::option::Iter<'a, A>
where A: Sync,

ยง

impl<'a, A> Sync for rustc_std_workspace_std::option::IterMut<'a, A>
where A: Sync,

ยง

impl<'a, B> Sync for Cow<'a, B>
where <B as ToOwned>::Owned: Sync, B: Sync + ?Sized,

ยง

impl<'a, F> Sync for CharPredicateSearcher<'a, F>
where F: Sync,

ยง

impl<'a, I> Sync for ByRefSized<'a, I>
where I: Sync,

ยง

impl<'a, I, A> Sync for Splice<'a, I, A>
where I: Sync, <I as Iterator>::Item: Sync, A: Sync,

ยง

impl<'a, K> Sync for rustc_std_workspace_std::collections::btree_set::Cursor<'a, K>
where K: Sync,

ยง

impl<'a, K> Sync for rustc_std_workspace_std::collections::hash_set::Drain<'a, K>
where K: Sync,

ยง

impl<'a, K> Sync for rustc_std_workspace_std::collections::hash_set::Iter<'a, K>
where K: Sync,

ยง

impl<'a, K, A> Sync for rustc_std_workspace_std::collections::btree_set::CursorMut<'a, K, A>
where A: Sync, K: Sync,

ยง

impl<'a, K, A> Sync for rustc_std_workspace_std::collections::btree_set::CursorMutKey<'a, K, A>
where A: Sync, K: Sync,

ยง

impl<'a, K, F> Sync for rustc_std_workspace_std::collections::hash_set::ExtractIf<'a, K, F>
where F: Sync, K: Sync,

ยง

impl<'a, K, V> Sync for rustc_std_workspace_std::collections::hash_map::Entry<'a, K, V>
where K: Sync, V: Sync,

ยง

impl<'a, K, V> Sync for rustc_std_workspace_std::collections::btree_map::Cursor<'a, K, V>
where K: Sync, V: Sync,

ยง

impl<'a, K, V> Sync for rustc_std_workspace_std::collections::btree_map::Iter<'a, K, V>
where K: Sync, V: Sync,

ยง

impl<'a, K, V> Sync for rustc_std_workspace_std::collections::btree_map::IterMut<'a, K, V>
where K: Sync, V: Sync,

ยง

impl<'a, K, V> Sync for rustc_std_workspace_std::collections::btree_map::Keys<'a, K, V>
where K: Sync, V: Sync,

ยง

impl<'a, K, V> Sync for rustc_std_workspace_std::collections::btree_map::Range<'a, K, V>
where K: Sync, V: Sync,

ยง

impl<'a, K, V> Sync for RangeMut<'a, K, V>
where K: Sync, V: Sync,

ยง

impl<'a, K, V> Sync for rustc_std_workspace_std::collections::btree_map::Values<'a, K, V>
where K: Sync, V: Sync,

ยง

impl<'a, K, V> Sync for rustc_std_workspace_std::collections::btree_map::ValuesMut<'a, K, V>
where K: Sync, V: Sync,

ยง

impl<'a, K, V> Sync for rustc_std_workspace_std::collections::hash_map::Drain<'a, K, V>
where K: Sync, V: Sync,

ยง

impl<'a, K, V> Sync for rustc_std_workspace_std::collections::hash_map::Iter<'a, K, V>
where K: Sync, V: Sync,

ยง

impl<'a, K, V> Sync for rustc_std_workspace_std::collections::hash_map::IterMut<'a, K, V>
where K: Sync, V: Sync,

ยง

impl<'a, K, V> Sync for rustc_std_workspace_std::collections::hash_map::Keys<'a, K, V>
where K: Sync, V: Sync,

ยง

impl<'a, K, V> Sync for rustc_std_workspace_std::collections::hash_map::OccupiedEntry<'a, K, V>
where K: Sync, V: Sync,

ยง

impl<'a, K, V> Sync for rustc_std_workspace_std::collections::hash_map::OccupiedError<'a, K, V>
where V: Sync, K: Sync,

ยง

impl<'a, K, V> Sync for rustc_std_workspace_std::collections::hash_map::VacantEntry<'a, K, V>
where K: Sync, V: Sync,

ยง

impl<'a, K, V> Sync for rustc_std_workspace_std::collections::hash_map::Values<'a, K, V>
where K: Sync, V: Sync,

ยง

impl<'a, K, V> Sync for rustc_std_workspace_std::collections::hash_map::ValuesMut<'a, K, V>
where K: Sync, V: Sync,

ยง

impl<'a, K, V, A> Sync for rustc_std_workspace_std::collections::btree_map::Entry<'a, K, V, A>
where K: Sync, A: Sync, V: Sync,

ยง

impl<'a, K, V, A> Sync for rustc_std_workspace_std::collections::btree_map::CursorMut<'a, K, V, A>
where A: Sync, K: Sync, V: Sync,

ยง

impl<'a, K, V, A> Sync for rustc_std_workspace_std::collections::btree_map::CursorMutKey<'a, K, V, A>
where A: Sync, K: Sync, V: Sync,

ยง

impl<'a, K, V, A> Sync for rustc_std_workspace_std::collections::btree_map::OccupiedEntry<'a, K, V, A>
where A: Sync, K: Sync, V: Sync,

ยง

impl<'a, K, V, A> Sync for rustc_std_workspace_std::collections::btree_map::OccupiedError<'a, K, V, A>
where V: Sync, A: Sync, K: Sync,

ยง

impl<'a, K, V, A> Sync for rustc_std_workspace_std::collections::btree_map::VacantEntry<'a, K, V, A>
where K: Sync, A: Sync, V: Sync,

ยง

impl<'a, K, V, F> Sync for rustc_std_workspace_std::collections::hash_map::ExtractIf<'a, K, V, F>
where F: Sync, K: Sync, V: Sync,

ยง

impl<'a, K, V, F, A> Sync for rustc_std_workspace_std::collections::btree_map::ExtractIf<'a, K, V, F, A>
where F: Sync, A: Sync, K: Sync, V: Sync,

ยง

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

ยง

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

ยง

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

ยง

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

ยง

impl<'a, P> Sync for rustc_std_workspace_std::str::RSplit<'a, P>
where <P as Pattern>::Searcher<'a>: Sync,

ยง

impl<'a, P> Sync for rustc_std_workspace_std::str::RSplitN<'a, P>
where <P as Pattern>::Searcher<'a>: Sync,

ยง

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

ยง

impl<'a, P> Sync for rustc_std_workspace_std::str::Split<'a, P>
where <P as Pattern>::Searcher<'a>: Sync,

ยง

impl<'a, P> Sync for rustc_std_workspace_std::str::SplitInclusive<'a, P>
where <P as Pattern>::Searcher<'a>: Sync,

ยง

impl<'a, P> Sync for rustc_std_workspace_std::str::SplitN<'a, P>
where <P as Pattern>::Searcher<'a>: Sync,

ยง

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

ยง

impl<'a, T> !Sync for rustc_std_workspace_std::sync::mpsc::Iter<'a, T>

ยง

impl<'a, T> !Sync for rustc_std_workspace_std::sync::mpsc::TryIter<'a, T>

ยง

impl<'a, T> Sync for rustc_std_workspace_std::collections::binary_heap::Iter<'a, T>
where T: Sync,

ยง

impl<'a, T> Sync for rustc_std_workspace_std::collections::btree_set::Iter<'a, T>
where T: Sync,

ยง

impl<'a, T> Sync for rustc_std_workspace_std::collections::btree_set::Range<'a, T>
where T: Sync,

ยง

impl<'a, T> Sync for rustc_std_workspace_std::collections::btree_set::SymmetricDifference<'a, T>
where T: Sync,

ยง

impl<'a, T> Sync for rustc_std_workspace_std::collections::btree_set::Union<'a, T>
where T: Sync,

ยง

impl<'a, T> Sync for rustc_std_workspace_std::collections::vec_deque::Iter<'a, T>
where T: Sync,

ยง

impl<'a, T> Sync for rustc_std_workspace_std::collections::vec_deque::IterMut<'a, T>
where T: Sync,

ยง

impl<'a, T> Sync for rustc_std_workspace_std::result::Iter<'a, T>
where T: Sync,

ยง

impl<'a, T> Sync for rustc_std_workspace_std::result::IterMut<'a, T>
where T: Sync,

ยง

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

ยง

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

ยง

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

ยง

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

ยง

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

ยง

impl<'a, T> Sync for rustc_std_workspace_std::sync::mpmc::Iter<'a, T>
where T: Send,

ยง

impl<'a, T> Sync for rustc_std_workspace_std::sync::mpmc::TryIter<'a, T>
where T: Send,

ยง

impl<'a, T, A> Sync for rustc_std_workspace_std::collections::btree_set::Entry<'a, T, A>
where A: Sync, T: Sync,

ยง

impl<'a, T, A> Sync for rustc_std_workspace_std::collections::binary_heap::Drain<'a, T, A>
where T: Sync, A: Sync,

ยง

impl<'a, T, A> Sync for DrainSorted<'a, T, A>
where A: Sync, T: Sync,

ยง

impl<'a, T, A> Sync for PeekMut<'a, T, A>
where A: Sync, T: Sync,

ยง

impl<'a, T, A> Sync for rustc_std_workspace_std::collections::btree_set::Difference<'a, T, A>
where T: Sync, A: Sync,

ยง

impl<'a, T, A> Sync for rustc_std_workspace_std::collections::btree_set::Intersection<'a, T, A>
where T: Sync, A: Sync,

ยง

impl<'a, T, A> Sync for rustc_std_workspace_std::collections::btree_set::OccupiedEntry<'a, T, A>
where A: Sync, T: Sync,

ยง

impl<'a, T, A> Sync for rustc_std_workspace_std::collections::btree_set::VacantEntry<'a, T, A>
where T: Sync, A: Sync,

ยง

impl<'a, T, F, A = Global> !Sync for rustc_std_workspace_std::collections::linked_list::ExtractIf<'a, T, F, A>

ยง

impl<'a, T, F, A> Sync for rustc_std_workspace_std::collections::btree_set::ExtractIf<'a, T, F, A>
where F: Sync, A: Sync, T: Sync,

ยง

impl<'a, T, F, A> Sync for rustc_std_workspace_std::vec::ExtractIf<'a, T, F, A>
where F: Sync, A: Sync, T: Sync,

ยง

impl<'a, T, P> Sync for ChunkBy<'a, T, P>
where P: Sync, T: Sync,

ยง

impl<'a, T, P> Sync for ChunkByMut<'a, T, P>
where P: Sync, T: Sync,

ยง

impl<'a, T, P> Sync for rustc_std_workspace_std::slice::RSplit<'a, T, P>
where P: Sync, T: Sync,

ยง

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

ยง

impl<'a, T, P> Sync for rustc_std_workspace_std::slice::RSplitN<'a, T, P>
where P: Sync, T: Sync,

ยง

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

ยง

impl<'a, T, P> Sync for rustc_std_workspace_std::slice::Split<'a, T, P>
where P: Sync, T: Sync,

ยง

impl<'a, T, P> Sync for rustc_std_workspace_std::slice::SplitInclusive<'a, T, P>
where P: Sync, T: Sync,

ยง

impl<'a, T, P> Sync for SplitInclusiveMut<'a, T, P>
where P: Sync, T: Sync,

ยง

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

ยง

impl<'a, T, P> Sync for rustc_std_workspace_std::slice::SplitN<'a, T, P>
where P: Sync, T: Sync,

ยง

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

ยง

impl<'a, T, S> Sync for rustc_std_workspace_std::collections::hash_set::Entry<'a, T, S>
where T: Sync, S: Sync,

ยง

impl<'a, T, S> Sync for rustc_std_workspace_std::collections::hash_set::Difference<'a, T, S>
where S: Sync, T: Sync,

ยง

impl<'a, T, S> Sync for rustc_std_workspace_std::collections::hash_set::Intersection<'a, T, S>
where S: Sync, T: Sync,

ยง

impl<'a, T, S> Sync for rustc_std_workspace_std::collections::hash_set::OccupiedEntry<'a, T, S>
where T: Sync, S: Sync,

ยง

impl<'a, T, S> Sync for rustc_std_workspace_std::collections::hash_set::SymmetricDifference<'a, T, S>
where S: Sync, T: Sync,

ยง

impl<'a, T, S> Sync for rustc_std_workspace_std::collections::hash_set::Union<'a, T, S>
where S: Sync, T: Sync,

ยง

impl<'a, T, S> Sync for rustc_std_workspace_std::collections::hash_set::VacantEntry<'a, T, S>
where T: Sync, S: Sync,

ยง

impl<'a, T, const N: usize> !Sync for ArrayWindows<'a, T, N>

ยง

impl<'a, T, const N: usize> Sync for rustc_std_workspace_std::slice::ArrayChunks<'a, T, N>
where T: Sync,

ยง

impl<'a, T, const N: usize> Sync for ArrayChunksMut<'a, T, N>
where T: Sync,

ยง

impl<'a, const N: usize> Sync for CharArraySearcher<'a, N>

ยง

impl<'b, T> !Sync for Ref<'b, T>

ยง

impl<'b, T> !Sync for RefMut<'b, T>

ยง

impl<'data> Sync for BorrowedBuf<'data>

ยง

impl<'f> !Sync for VaListImpl<'f>

ยง

impl<'fd> Sync for BorrowedFd<'fd>

ยง

impl<'scope, 'env> Sync for Scope<'scope, 'env>

ยง

impl<'scope, T> Sync for ScopedJoinHandle<'scope, T>
where T: Send,

ยง

impl<A> Sync for rustc_std_workspace_std::iter::Repeat<A>
where A: Sync,

ยง

impl<A> Sync for RepeatN<A>
where A: Sync,

ยง

impl<A> Sync for rustc_std_workspace_std::option::IntoIter<A>
where A: Sync,

ยง

impl<A> Sync for IterRange<A>
where A: Sync,

ยง

impl<A> Sync for IterRangeFrom<A>
where A: Sync,

ยง

impl<A> Sync for IterRangeInclusive<A>
where A: Sync,

ยง

impl<A, B> Sync for rustc_std_workspace_std::iter::Chain<A, B>
where A: Sync, B: Sync,

ยง

impl<A, B> Sync for Zip<A, B>
where A: Sync, B: Sync,

ยง

impl<B> Sync for rustc_std_workspace_std::io::Lines<B>
where B: Sync,

ยง

impl<B> Sync for rustc_std_workspace_std::io::Split<B>
where B: Sync,

ยง

impl<B, C> Sync for ControlFlow<B, C>
where C: Sync, B: Sync,

ยง

impl<E> Sync for Report<E>
where E: Sync,

ยง

impl<F> Sync for rustc_std_workspace_std::fmt::FromFn<F>
where F: Sync,

ยง

impl<F> Sync for PollFn<F>
where F: Sync,

ยง

impl<F> Sync for rustc_std_workspace_std::iter::FromFn<F>
where F: Sync,

ยง

impl<F> Sync for OnceWith<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>

ยง

impl<I> Sync for FromIter<I>
where I: Sync,

ยง

impl<I> Sync for DecodeUtf16<I>
where I: 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,

ยง

impl<I> Sync for Enumerate<I>
where I: Sync,

ยง

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

ยง

impl<I> Sync for Fuse<I>
where I: Sync,

ยง

impl<I> Sync for Intersperse<I>
where <I as Iterator>::Item: Sized + Sync, I: Sync,

ยง

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

ยง

impl<I> Sync for Skip<I>
where I: Sync,

ยง

impl<I> Sync for StepBy<I>
where I: Sync,

ยง

impl<I> Sync for rustc_std_workspace_std::iter::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, I: Sync, <I as Iterator>::Item: Sync,

ยง

impl<I, G> Sync for IntersperseWith<I, G>
where G: Sync, <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, F> Sync for FlatMap<I, U, F>
where <U as IntoIterator>::IntoIter: Sync, I: Sync, F: Sync,

ยง

impl<I, const N: usize> Sync for rustc_std_workspace_std::iter::ArrayChunks<I, N>
where I: Sync, <I as Iterator>::Item: Sync,

ยง

impl<Idx> Sync for rustc_std_workspace_std::ops::Range<Idx>
where Idx: Sync,

ยง

impl<Idx> Sync for rustc_std_workspace_std::ops::RangeFrom<Idx>
where Idx: Sync,

ยง

impl<Idx> Sync for rustc_std_workspace_std::ops::RangeInclusive<Idx>
where Idx: Sync,

ยง

impl<Idx> Sync for RangeTo<Idx>
where Idx: Sync,

ยง

impl<Idx> Sync for RangeToInclusive<Idx>
where Idx: Sync,

ยง

impl<Idx> Sync for rustc_std_workspace_std::range::Range<Idx>
where Idx: Sync,

ยง

impl<Idx> Sync for rustc_std_workspace_std::range::RangeFrom<Idx>
where Idx: Sync,

ยง

impl<Idx> Sync for rustc_std_workspace_std::range::RangeInclusive<Idx>
where Idx: Sync,

ยง

impl<K> Sync for rustc_std_workspace_std::collections::hash_set::IntoIter<K>
where K: Sync,

ยง

impl<K, V> Sync for rustc_std_workspace_std::collections::hash_map::IntoIter<K, V>
where K: Sync, V: Sync,

ยง

impl<K, V> Sync for rustc_std_workspace_std::collections::hash_map::IntoKeys<K, V>
where K: Sync, V: Sync,

ยง

impl<K, V> Sync for rustc_std_workspace_std::collections::hash_map::IntoValues<K, V>
where K: Sync, V: Sync,

ยง

impl<K, V, A> Sync for rustc_std_workspace_std::collections::btree_map::IntoIter<K, V, A>
where A: Sync, K: Sync, V: Sync,

ยง

impl<K, V, A> Sync for rustc_std_workspace_std::collections::btree_map::IntoKeys<K, V, A>
where A: Sync, K: Sync, V: Sync,

ยง

impl<K, V, A> Sync for rustc_std_workspace_std::collections::btree_map::IntoValues<K, V, A>
where A: Sync, K: Sync, V: Sync,

ยง

impl<K, V, A> Sync for BTreeMap<K, V, A>
where A: Sync, K: Sync, V: Sync,

ยง

impl<K, V, S> Sync for HashMap<K, V, S>
where S: Sync, K: Sync, V: Sync,

ยง

impl<Ptr> Sync for Pin<Ptr>
where Ptr: Sync,

ยง

impl<R> Sync for BufReader<R>
where R: Sync + ?Sized,

ยง

impl<R> Sync for rustc_std_workspace_std::io::Bytes<R>
where R: Sync,

ยง

impl<T> !Sync for rustc_std_workspace_std::sync::mpsc::IntoIter<T>

ยง

impl<T> !Sync for rustc_std_workspace_std::thread::local_impl::EagerStorage<T>

ยง

impl<T> Sync for Bound<T>
where T: Sync,

ยง

impl<T> Sync for Option<T>
where T: Sync,

ยง

impl<T> Sync for rustc_std_workspace_std::sync::TryLockError<T>
where T: Sync,

ยง

impl<T> Sync for SendTimeoutError<T>
where T: Sync,

ยง

impl<T> Sync for TrySendError<T>
where T: Sync,

ยง

impl<T> Sync for Poll<T>
where T: Sync,

ยง

impl<T> Sync for Reverse<T>
where T: Sync,

ยง

impl<T> Sync for Pending<T>

ยง

impl<T> Sync for Ready<T>
where T: Sync,

ยง

impl<T> Sync for rustc_std_workspace_std::io::Cursor<T>
where T: Sync,

ยง

impl<T> Sync for rustc_std_workspace_std::io::Take<T>
where T: Sync,

ยง

impl<T> Sync for rustc_std_workspace_std::iter::Empty<T>

ยง

impl<T> Sync for rustc_std_workspace_std::iter::Once<T>
where T: Sync,

ยง

impl<T> Sync for Rev<T>
where T: Sync,

ยง

impl<T> Sync for PhantomContravariant<T>
where T: ?Sized,

ยง

impl<T> Sync for PhantomCovariant<T>
where T: ?Sized,

ยง

impl<T> Sync for PhantomData<T>
where T: Sync + ?Sized,

ยง

impl<T> Sync for PhantomInvariant<T>
where T: ?Sized,

ยง

impl<T> Sync for Discriminant<T>

ยง

impl<T> Sync for ManuallyDrop<T>
where T: Sync + ?Sized,

ยง

impl<T> Sync for Saturating<T>
where T: Sync,

ยง

impl<T> Sync for Wrapping<T>
where T: Sync,

ยง

impl<T> Sync for Yeet<T>
where T: Sync,

ยง

impl<T> Sync for AssertUnwindSafe<T>
where T: Sync,

ยง

impl<T> Sync for UnsafePinned<T>
where T: Sync + ?Sized,

ยง

impl<T> Sync for rustc_std_workspace_std::result::IntoIter<T>
where T: Sync,

ยง

impl<T> Sync for rustc_std_workspace_std::sync::mpmc::IntoIter<T>
where T: Send,

ยง

impl<T> Sync for SendError<T>
where T: Sync,

ยง

impl<T> Sync for SyncSender<T>
where T: Send,

ยง

impl<T> Sync for PoisonError<T>
where T: Sync,

ยง

impl<T> Sync for LocalKey<T>

ยง

impl<T> Sync for MaybeUninit<T>
where T: Sync,

ยง

impl<T, A> Sync for Box<T, A>
where A: Sync, T: Sync + ?Sized,

ยง

impl<T, A> Sync for rustc_std_workspace_std::collections::binary_heap::IntoIter<T, A>
where T: Sync, A: Sync,

ยง

impl<T, A> Sync for IntoIterSorted<T, A>
where A: Sync, T: Sync,

ยง

impl<T, A> Sync for rustc_std_workspace_std::collections::btree_set::IntoIter<T, A>
where A: Sync, T: Sync,

ยง

impl<T, A> Sync for rustc_std_workspace_std::collections::linked_list::IntoIter<T, A>
where T: Sync, A: Sync,

ยง

impl<T, A> Sync for BTreeSet<T, A>
where A: Sync, T: Sync,

ยง

impl<T, A> Sync for BinaryHeap<T, A>
where A: Sync, T: Sync,

ยง

impl<T, A> Sync for VecDeque<T, A>
where A: Sync, T: Sync,

ยง

impl<T, A> Sync for rustc_std_workspace_std::collections::vec_deque::IntoIter<T, A>
where A: Sync, T: Sync,

ยง

impl<T, A> Sync for Vec<T, A>
where A: Sync, T: Sync,

ยง

impl<T, D> !Sync for rustc_std_workspace_std::thread::local_impl::LazyStorage<T, D>

ยง

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 Successors<T, F>
where F: Sync, T: Sync,

ยง

impl<T, S> Sync for HashSet<T, S>
where S: Sync, T: Sync,

ยง

impl<T, U> Sync for rustc_std_workspace_std::io::Chain<T, U>
where T: Sync, U: Sync,

ยง

impl<T, const N: usize> Sync for rustc_std_workspace_std::array::IntoIter<T, N>
where T: Sync,

ยง

impl<T, const N: usize> Sync for Mask<T, N>
where T: Sync,

ยง

impl<T, const N: usize> Sync for Simd<T, N>
where T: Sync,

ยง

impl<W> Sync for BufWriter<W>
where W: Sync + ?Sized,

ยง

impl<W> Sync for IntoInnerError<W>
where W: Sync,

ยง

impl<W> Sync for LineWriter<W>
where W: Sync + ?Sized,

ยง

impl<Y, R> Sync for CoroutineState<Y, R>
where Y: Sync, R: Sync,

ยง

impl<const N: usize> Sync for LaneCount<N>