Skip to main content

Sync

Trait Sync 

1.0.0 · Source
pub unsafe auto trait Sync { }
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.

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

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

1.98.0 · Source§

impl !Sync for VarsOs

Source§

impl Sync for AbortHandle

Source§

impl Sync for futures_core::task::__internal::atomic_waker::AtomicWaker

Source§

impl Sync for atomic_waker::AtomicWaker

Source§

impl Sync for bytes::bytes::Bytes

Source§

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

Source§

impl Sync for BytesMut

Source§

impl Sync for Collector

Source§

impl Sync for DIR

1.6.0 · Source§

impl Sync for lib::text::Drain<'_>

Source§

impl Sync for GuardNoSend

Source§

impl Sync for libloading::os::unix::Library

Source§

impl Sync for libloading::safe::Library

1.10.0 · Source§

impl Sync for Location<'_>

Source§

impl Sync for OwnedNotified

Source§

impl Sync for crossbeam_utils::thread::Scope<'_>

Source§

impl Sync for Select<'_>

Source§

impl Sync for SqliteOwnedBuf

Source§

impl Sync for SqliteRow

1.0.0 · Source§

impl Sync for TypeId

Source§

impl Sync for Unparker

1.36.0 · Source§

impl Sync for Waker

Source§

impl<'a, 'b, K, Q, V, S, A> Sync for OccupiedEntryRef<'a, 'b, K, Q, V, S, A>
where K: Sync, Q: Sync + ?Sized, V: Sync, S: Sync, A: Sync + Allocator,

Source§

impl<'a, K, S, M> Sync for dashmap::iter_set::Iter<'_, K, S, M>
where K: 'a + Eq + Hash + Sync, S: 'a + BuildHasher + Clone, M: Map<'a, K, (), S>,

Source§

impl<'a, K, V, S, M> Sync for dashmap::iter::Iter<'_, K, V, S, M>
where K: 'a + Eq + Hash + Sync, V: 'a + Sync, S: 'a + BuildHasher + Clone, M: Map<'a, K, V, S>,

Source§

impl<'a, K, V, S, M> Sync for dashmap::iter::IterMut<'_, K, V, S, M>
where K: 'a + Eq + Hash + Sync, V: 'a + Sync, S: 'a + BuildHasher + Clone, M: Map<'a, K, V, S>,

Source§

impl<'a, R, G, T> Sync for MappedReentrantMutexGuard<'a, R, G, T>
where R: RawMutex + Sync + 'a, G: GetThreadId + Sync + 'a, T: Sync + 'a + ?Sized,

Source§

impl<'a, R, G, T> Sync for ReentrantMutexGuard<'a, R, G, T>
where R: RawMutex + Sync + 'a, G: GetThreadId + Sync + 'a, T: Sync + 'a + ?Sized,

Source§

impl<'a, R, T> Sync for lock_api::mutex::MappedMutexGuard<'a, R, T>
where R: RawMutex + Sync + 'a, T: Sync + 'a + ?Sized,

Source§

impl<'a, R, T> Sync for lock_api::rwlock::MappedRwLockReadGuard<'a, R, T>
where R: RawRwLock + 'a, T: Sync + 'a + ?Sized,

Source§

impl<'a, R, T> Sync for lock_api::rwlock::MappedRwLockWriteGuard<'a, R, T>
where R: RawRwLock + 'a, T: Sync + 'a + ?Sized,

Source§

impl<'a, R, T> Sync for lock_api::mutex::MutexGuard<'a, R, T>
where R: RawMutex + Sync + 'a, T: Sync + 'a + ?Sized,

Source§

impl<'a, R, T> Sync for RwLockUpgradableReadGuard<'a, R, T>
where R: RawRwLockUpgrade + 'a, T: Sync + 'a + ?Sized,

Source§

impl<'a, T, const CAP: usize> Sync for arrayvec::arrayvec::Drain<'a, T, CAP>
where T: Sync,

Source§

impl<'a, T> Sync for smallvec::Drain<'a, T>
where T: Sync + Array,

Source§

impl<'a, T> Sync for http::header::map::Drain<'a, T>
where T: Sync,

Source§

impl<'a, T> Sync for http::header::map::Iter<'a, T>
where T: Sync,

Source§

impl<'a, T> Sync for http::header::map::IterMut<'a, T>
where T: Sync,

Source§

impl<'a, T> Sync for tokio::sync::mutex::MappedMutexGuard<'a, T>
where T: Sync + 'a + ?Sized,

Source§

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

Source§

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

Source§

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

Source§

impl<'a, T> Sync for ZeroVec<'a, T>
where T: AsULE, <T as AsULE>::ULE: Sync,

1.44.0 · Source§

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

1.44.0 · Source§

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

Source§

impl<'a> Sync for Notified<'a>

Source§

impl<C> Sync for CartableOptionPointer<C>

Source§

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

Source§

impl<Fut> Sync for FuturesUnordered<Fut>
where Fut: Send + Sync,

Source§

impl<Fut> Sync for futures_util::stream::futures_unordered::iter::IntoIter<Fut>
where Fut: Sync + Unpin,

Source§

impl<Fut> Sync for IterPinMut<'_, Fut>
where Fut: Sync,

Source§

impl<Fut> Sync for IterPinRef<'_, Fut>
where Fut: Sync,

Source§

impl<K, S> Sync for dashmap::iter_set::OwningIter<K, S>
where K: Eq + Hash + Sync, S: BuildHasher + Clone + Sync,

Source§

impl<K, V, S, A> Sync for hashbrown::map::OccupiedEntry<'_, K, V, S, A>
where K: Sync, V: Sync, S: Sync, A: Sync + Allocator,

Source§

impl<K, V, S, A> Sync for hashbrown::map::OccupiedEntry<'_, K, V, S, A>
where K: Sync, V: Sync, S: Sync, A: Sync + Allocator,

Source§

impl<K, V, S, A> Sync for hashbrown::map::OccupiedEntry<'_, K, V, S, A>
where K: Sync, V: Sync, S: Sync, A: Sync + Allocator,

Source§

impl<K, V, S, A> Sync for hashbrown::map::RawOccupiedEntryMut<'_, K, V, S, A>
where K: Sync, V: Sync, S: Sync, A: Sync + Allocator,

Source§

impl<K, V, S, A> Sync for hashbrown::raw_entry::RawOccupiedEntryMut<'_, K, V, S, A>
where K: Sync, V: Sync, S: Sync, A: Sync + Allocator,

Source§

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

Source§

impl<K, V, S> Sync for dashmap::iter::OwningIter<K, V, S>
where K: Eq + Hash + Sync, V: Sync, S: BuildHasher + Clone + Sync,

Source§

impl<K, V, S> Sync for hashlink::linked_hash_map::RawOccupiedEntryMut<'_, K, V, S>
where K: Sync, V: Sync, S: Sync,

Source§

impl<K, V, S> Sync for RawVacantEntryMut<'_, K, V, S>
where K: Sync, V: Sync, S: Sync,

Source§

impl<K, V> Sync for hashlink::linked_hash_map::Drain<'_, K, V>
where K: Sync, V: Sync,

Source§

impl<K, V> Sync for hashlink::linked_hash_map::IntoIter<K, V>
where K: Sync, V: Sync,

Source§

impl<K, V> Sync for hashlink::linked_hash_map::Iter<'_, K, V>
where K: Sync, V: Sync,

Source§

impl<K, V> Sync for hashlink::linked_hash_map::IterMut<'_, K, V>
where K: Sync, V: Sync,

Source§

impl<K, V> Sync for dashmap::mapref::entry::OccupiedEntry<'_, K, V>
where K: Eq + Hash + Sync, V: Sync,

Source§

impl<K, V> Sync for dashmap::mapref::one::Ref<'_, K, V>
where K: Eq + Hash + Sync, V: Sync,

Source§

impl<K, V> Sync for RefMulti<'_, K, V>
where K: Eq + Hash + Sync, V: Sync,

Source§

impl<K, V> Sync for dashmap::mapref::one::RefMut<'_, K, V>
where K: Eq + Hash + Sync, V: Sync,

Source§

impl<K, V> Sync for RefMutMulti<'_, K, V>
where K: Eq + Hash + Sync, V: Sync,

Source§

impl<K, V> Sync for dashmap::mapref::entry::VacantEntry<'_, K, V>
where K: Eq + Hash + Sync, V: Sync,

Source§

impl<MutexType, T, A> Sync for GenericChannel<MutexType, T, A>
where MutexType: RawMutex + Sync, T: Send, A: RingBuf<Item = T>,

Source§

impl<MutexType, T> Sync for GenericMutexGuard<'_, MutexType, T>
where MutexType: RawMutex, T: Sync,

Source§

impl<MutexType, T> Sync for GenericOneshotBroadcastChannel<MutexType, T>
where MutexType: RawMutex + Sync, T: Send,

Source§

impl<MutexType, T> Sync for GenericOneshotChannel<MutexType, T>
where MutexType: RawMutex + Sync, T: Send,

Source§

impl<MutexType, T> Sync for GenericStateBroadcastChannel<MutexType, T>
where MutexType: RawMutex + Sync, T: Send,

Source§

impl<MutexType> Sync for GenericManualResetEvent<MutexType>
where MutexType: RawMutex + Sync,

Source§

impl<MutexType> Sync for GenericSemaphore<MutexType>
where MutexType: RawMutex + Sync,

Source§

impl<MutexType> Sync for GenericSharedSemaphore<MutexType>
where MutexType: RawMutex + Sync,

Source§

impl<MutexType> Sync for GenericTimerService<MutexType>
where MutexType: RawMutex + Sync,

Source§

impl<R, G, T> Sync for ReentrantMutex<R, G, T>
where R: RawMutex + Sync, G: GetThreadId + Sync, T: Send + ?Sized,

Source§

impl<R, G> Sync for RawReentrantMutex<R, G>
where R: RawMutex + Sync, G: GetThreadId + Sync,

Source§

impl<R, T> Sync for lock_api::mutex::Mutex<R, T>
where R: RawMutex + Sync, T: Send + ?Sized,

Source§

impl<R, T> Sync for lock_api::rwlock::RwLock<R, T>
where R: RawRwLock + Sync, T: Send + Sync + ?Sized,

Source§

impl<R, T> Sync for lock_api::rwlock::RwLockReadGuard<'_, R, T>
where R: RawRwLock + Sync, T: Sync + ?Sized,

Source§

impl<R, T> Sync for lock_api::rwlock::RwLockWriteGuard<'_, R, T>
where R: RawRwLock + Sync, T: Sync + ?Sized,

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 alloc::rc::Weak<T, A>
where A: Allocator, T: ?Sized,

1.0.0 · Source§

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

Source§

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

Source§

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

Source§

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

1.6.0 · Source§

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

1.6.0 · Source§

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

Source§

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

1.0.0 · Source§

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

Source§

impl<T, A> Sync for allocator_api2::stable::vec::into_iter::IntoIter<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,

Source§

impl<T, A> Sync for hashbrown::table::OccupiedEntry<'_, T, A>
where T: Sync, A: Sync + Allocator,

Source§

impl<T, A> Sync for hashbrown::table::OccupiedEntry<'_, T, A>
where T: Sync, A: Sync + Allocator,

Source§

impl<T, A> Sync for hashbrown::table::OccupiedEntry<'_, T, A>
where T: Sync, A: Sync + Allocator,

Source§

impl<T, A> Sync for RawDrain<'_, T, A>
where A: Allocator + Sync, T: Sync,

Source§

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

Source§

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

Source§

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

1.4.0 · Source§

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

Source§

impl<T, F, S> Sync for ScopeGuard<T, F, S>
where T: Sync, F: FnOnce(T), S: Strategy,

Source§

impl<T, F> Sync for spin::lazy::Lazy<T, F>
where F: Send, Once<T>: Sync,

Source§

impl<T, F> Sync for once_cell::sync::Lazy<T, F>
where F: Send, OnceCell<T>: Sync,

1.80.0 · Source§

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

Source§

impl<T, MutexType> Sync for GenericMutex<MutexType, T>
where T: Send, MutexType: RawMutex + Sync,

Source§

impl<T, N> Sync for GenericArray<T, N>
where T: Sync, N: ArrayLength<T>,

Source§

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

Source§

impl<T, R> Sync for spin::once::Once<T, R>
where T: Send + Sync,

Source§

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

Source§

impl<T, R> Sync for RwLockUpgradableGuard<'_, T, R>
where T: Send + Sync + ?Sized,

Source§

impl<T, R> Sync for spin::rwlock::RwLockWriteGuard<'_, T, R>
where T: Send + Sync + ?Sized,

Source§

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

Source§

impl<T, U> Sync for hybrid_array::Array<T, U>
where U: ArraySize, T: Sync,

SAFETY: Array is a repr(transparent) newtype for [T; N], so as long as T: Sync it should also be Sync.

Source§

impl<T, U> Sync for futures_util::lock::mutex::MappedMutexGuard<'_, T, U>
where T: Sync + ?Sized, U: Sync + ?Sized,

Source§

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

Source§

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

Source§

impl<T, U> Sync for OwnedRwLockReadGuard<T, U>
where T: Send + Sync + ?Sized, U: Send + Sync + ?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,

Source§

impl<T> !Sync for CovariantUnsafeCell<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.70.0 · Source§

impl<T> !Sync for lib::core::cell::OnceCell<T>

1.0.0 · Source§

impl<T> !Sync for lib::sync::mpsc::Receiver<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,

Source§

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

1.0.0 · Source§

impl<T> Sync for lib::sync::atomic::Atomic<T>
where T: AtomicPrimitive,

Source§

impl<T> Sync for crossbeam_epoch::atomic::Atomic<T>
where T: Pointable + Send + Sync + ?Sized,

Source§

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

Source§

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

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,

Source§

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

Source§

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

Source§

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

1.0.0 · Source§

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

1.0.0 · Source§

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

1.0.0 · Source§

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

1.0.0 · Source§

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

1.29.0 · Source§

impl<T> Sync for lib::sync::thread::JoinHandle<T>

Source§

impl<T> Sync for tokio::runtime::task::join::JoinHandle<T>
where T: Send,

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

impl<T> Sync for lib::sync::nonpoison::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.0.0 · Source§

impl<T> Sync for lib::prelude::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.

Source§

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

Source§

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

Source§

impl<T> Sync for tokio::sync::mutex::MutexGuard<'_, T>
where T: Send + Sync + ?Sized,

Source§

impl<T> Sync for lib::sync::nonpoison::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.19.0 · Source§

impl<T> Sync for lib::sync::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).

Source§

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

Source§

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

1.28.0 · Source§

impl<T> Sync for NonZero<T>

Source§

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

Source§

impl<T> Sync for tokio::sync::once_cell::OnceCell<T>
where T: Sync + Send,

1.70.0 · Source§

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

Source§

impl<T> Sync for tokio::sync::mutex::OwnedMutexGuard<T>
where T: Send + Sync + ?Sized,

Source§

impl<T> Sync for futures_util::lock::mutex::OwnedMutexGuard<T>
where T: Sync + ?Sized,

Source§

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

Source§

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

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,

Source§

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

Source§

impl<T> Sync for lib::sync::oneshot::Receiver<T>

Source§

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

Source§

impl<T> Sync for crossbeam_channel::channel::Receiver<T>
where T: Send,

Source§

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

Source§

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

Source§

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

1.0.0 · Source§

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

Source§

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

Source§

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

Source§

impl<T> Sync for tokio::sync::rwlock::read_guard::RwLockReadGuard<'_, T>
where T: Send + Sync + ?Sized,

Source§

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

1.23.0 · Source§

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

Source§

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

Source§

impl<T> Sync for tokio::sync::rwlock::write_guard::RwLockWriteGuard<'_, T>
where T: Send + Sync + ?Sized,

Source§

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

1.23.0 · Source§

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

Source§

impl<T> Sync for crossbeam_utils::thread::ScopedJoinHandle<'_, T>

Source§

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

Source§

impl<T> Sync for lib::sync::oneshot::Sender<T>

Source§

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

1.72.0 · Source§

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

Source§

impl<T> Sync for crossbeam_channel::channel::Sender<T>
where T: Send,

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

impl<T> Sync for libloading::safe::Symbol<'_, T>
where T: Sync,

Source§

impl<T> Sync for libloading::os::unix::Symbol<T>
where T: Sync,

Source§

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

Source§

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

Source§

impl<T> Sync for SyncWrapper<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 TryLock<T>
where T: Send,

Source§

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

Source§

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

Auto implementors§

§

impl !Sync for OnceState

§

impl !Sync for RawWaker

§

impl !Sync for ThreadRng

§

impl !Sync for Vars

§

impl Sync for Abi

§

impl Sync for AccessError

§

impl Sync for AddrParseError

§

impl Sync for lib::core::fmt::Alignment

§

impl Sync for lib::core::mem::Alignment

§

impl Sync for Alphabetic

§

impl Sync for Alphanumeric

§

impl Sync for lib::core::mem::type_info::Array

§

impl Sync for Assume

§

impl Sync for Barrier

§

impl Sync for BarrierWaitResult

§

impl Sync for Bernoulli

§

impl Sync for BernoulliError

§

impl Sync for BorrowError

§

impl Sync for BorrowMutError

§

impl Sync for Builder

§

impl Sync for Child

§

impl Sync for ChildStderr

§

impl Sync for ChildStdin

§

impl Sync for ChildStdout

§

impl Sync for Command

§

impl Sync for CommandResolvedEnvs

§

impl Sync for lib::sync::nonpoison::Condvar

§

impl Sync for lib::sync::Condvar

§

impl Sync for Const

§

impl Sync for DebugAsHex

§

impl Sync for DefaultHasher

§

impl Sync for Dir

§

impl Sync for DirBuilder

§

impl Sync for DirEntry

§

impl Sync for Duration

§

impl Sync for DynTrait

§

impl Sync for DynTraitPredicate

§

impl Sync for lib::io::Empty

§

impl Sync for lib::rand::distr::slice::Empty

§

impl Sync for lib::core::fmt::Error

§

impl Sync for lib::io::Error

§

impl Sync for lib::rand::distr::uniform::Error

§

impl Sync for lib::rand::distr::weighted::Error

§

impl Sync for lib::rand::rngs::SysError

§

impl Sync for ErrorKind

§

impl Sync for ExitCode

§

impl Sync for ExitStatus

§

impl Sync for ExitStatusError

§

impl Sync for FieldId

§

impl Sync for File

§

impl Sync for FileTimes

§

impl Sync for FileType

§

impl Sync for FnPtr

§

impl Sync for FormattingOptions

§

impl Sync for FromUtf8Error

§

impl Sync for FromUtf16Error

§

impl Sync for Generic

§

impl Sync for GenericType

§

impl Sync for IndexVec

§

impl Sync for IndexVecIntoIter

§

impl Sync for Instant

§

impl Sync for IntoChars

§

impl Sync for IntoIncoming

§

impl Sync for IpAddr

§

impl Sync for Ipv4Addr

§

impl Sync for Ipv6Addr

§

impl Sync for Ipv6MulticastScope

§

impl Sync for JoinPathsError

§

impl Sync for Lifetime

§

impl Sync for Locality

§

impl Sync for Metadata

§

impl Sync for lib::sync::Once

§

impl Sync for OneSidedRangeBound

§

impl Sync for Open01

§

impl Sync for OpenClosed01

§

impl Sync for OpenOptions

§

impl Sync for lib::core::cmp::Ordering

§

impl Sync for lib::sync::atomic::Ordering

§

impl Sync for Output

§

impl Sync for ParseBoolError

§

impl Sync for Path

§

impl Sync for PathBuf

§

impl Sync for Permissions

§

impl Sync for PhantomPinned

§

impl Sync for PipeReader

§

impl Sync for PipeWriter

§

impl Sync for Pointer

§

impl Sync for RandomState

§

impl Sync for RangeFull

§

impl Sync for RawWakerVTable

§

impl Sync for ReadDir

§

impl Sync for RecvError

§

impl Sync for lib::sync::mpmc::RecvTimeoutError

§

impl Sync for Reference

§

impl Sync for Repeat

§

impl Sync for SearchStep

§

impl Sync for SeekFrom

§

impl Sync for Shutdown

§

impl Sync for Sign

§

impl Sync for Sink

§

impl Sync for SipHasher

§

impl Sync for Slice

§

impl Sync for SmallRng

§

impl Sync for SocketAddr

§

impl Sync for SocketAddrV4

§

impl Sync for SocketAddrV6

§

impl Sync for StandardUniform

§

impl Sync for StdRng

§

impl Sync for Stderr

§

impl Sync for Stdin

§

impl Sync for Stdio

§

impl Sync for Stdout

§

impl Sync for Str

§

impl Sync for String

§

impl Sync for SysRng

§

impl Sync for SystemTime

§

impl Sync for SystemTimeError

§

impl Sync for TcpListener

§

impl Sync for TcpStream

§

impl Sync for Thread

§

impl Sync for ThreadId

§

impl Sync for Trait

§

impl Sync for TryFromFloatSecsError

§

impl Sync for lib::fs::TryLockError

§

impl Sync for lib::sync::mpmc::TryRecvError

§

impl Sync for TryReserveError

§

impl Sync for TryReserveErrorKind

§

impl Sync for Type

§

impl Sync for TypeKind

§

impl Sync for UdpSocket

§

impl Sync for UniformChar

§

impl Sync for UniformDuration

§

impl Sync for UniformUsize

§

impl Sync for UnorderedKeyError

§

impl Sync for Utf8Error

§

impl Sync for VarError

§

impl Sync for VariantId

§

impl Sync for WaitTimeoutResult

§

impl Sync for WouldBlock

§

impl Sync for WriterPanicked

§

impl Sync for Xoshiro128PlusPlus

§

impl Sync for Xoshiro256PlusPlus

§

impl<'a, 'b, const N: usize> Sync for CharArrayRefSearcher<'a, 'b, N>
where <MultiCharEqPattern<&'b [char; N]> as Pattern>::Searcher<'a>: Sync,

§

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, A> Sync for lib::core::option::Iter<'a, A>
where Item<&'a A>: Sync,

§

impl<'a, A> Sync for lib::core::option::IterMut<'a, A>
where Item<&'a mut A>: Sync,

§

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

§

impl<'a, F> Sync for CharPredicateSearcher<'a, F>
where <MultiCharEqPattern<F> as Pattern>::Searcher<'a>: Sync,

§

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

§

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

§

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

§

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

§

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

§

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

§

impl<'a, K, V, A> Sync for lib::collections::btree_map::CursorMutKey<'a, K, V, A>
where Option<Handle<NodeRef<Mut<'a>, K, V, Leaf>, Edge>>: Sync, DormantMutRef<'a, Option<NodeRef<Owned, K, V, LeafOrInternal>>>: Sync, &'a mut A: Sync,

§

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

§

impl<'a, K, V, A> Sync for lib::collections::hash_map::Entry<'a, K, V, A>
where OccupiedEntry<'a, K, V, A>: Sync, VacantEntry<'a, K, V, A>: Sync,

§

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

§

impl<'a, K, V, A> Sync for lib::collections::btree_map::OccupiedEntry<'a, K, V, A>
where Handle<NodeRef<Mut<'a>, K, V, LeafOrInternal>, KV>: Sync, DormantMutRef<'a, BTreeMap<K, V, A>>: Sync, A: Sync, PhantomData<&'a mut (K, V)>: Sync,

§

impl<'a, K, V, A> Sync for lib::collections::hash_map::OccupiedEntry<'a, K, V, A>
where RustcOccupiedEntry<'a, K, V, A>: Sync,

§

impl<'a, K, V, A> Sync for lib::collections::hash_map::OccupiedError<'a, K, V, A>
where OccupiedEntry<'a, K, V, A>: Sync, K: Sync, V: Sync,

§

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

§

impl<'a, K, V, A> Sync for lib::collections::btree_map::VacantEntry<'a, K, V, A>
where K: Sync, Option<Handle<NodeRef<Mut<'a>, K, V, Leaf>, Edge>>: Sync, DormantMutRef<'a, BTreeMap<K, V, A>>: Sync, A: Sync, PhantomData<&'a mut (K, V)>: Sync,

§

impl<'a, K, V, A> Sync for lib::collections::hash_map::VacantEntry<'a, K, V, A>
where RustcVacantEntry<'a, K, V, A>: Sync,

§

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

§

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

§

impl<'a, K, V> Sync for lib::collections::btree_map::Cursor<'a, K, V>
where Option<Handle<NodeRef<Immut<'a>, K, V, Leaf>, Edge>>: Sync, Option<&'a NodeRef<Owned, K, V, LeafOrInternal>>: Sync,

§

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

§

impl<'a, K, V> Sync for lib::collections::btree_map::Iter<'a, K, V>
where LazyLeafRange<Immut<'a>, K, V>: Sync,

§

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

§

impl<'a, K, V> Sync for lib::collections::btree_map::IterMut<'a, K, V>
where LazyLeafRange<ValMut<'a>, K, V>: Sync, PhantomData<&'a mut (K, V)>: Sync,

§

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

§

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

§

impl<'a, K, V> Sync for lib::collections::btree_map::Range<'a, K, V>
where LeafRange<Immut<'a>, K, V>: Sync,

§

impl<'a, K, V> Sync for RangeMut<'a, K, V>
where LeafRange<ValMut<'a>, K, V>: Sync, PhantomData<&'a mut (K, V)>: Sync,

§

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

§

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

§

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

§

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

§

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

§

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

§

impl<'a, P> Sync for MatchIndices<'a, P>
where MatchIndicesInternal<'a, P>: Sync,

§

impl<'a, P> Sync for Matches<'a, P>
where MatchesInternal<'a, P>: 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 lib::text::str::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 SplitN<'a, P>
where SplitNInternal<'a, P>: Sync,

§

impl<'a, P> Sync for SplitTerminator<'a, P>
where SplitInternal<'a, P>: Sync,

§

impl<'a, S, T> Sync for IndexedSamples<'a, S, T>
where &'a S: Sync, PhantomData<T>: Sync, S: ?Sized,

§

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

§

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

§

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

§

impl<'a, T, A> Sync for lib::collections::btree_set::Entry<'a, T, A>
where OccupiedEntry<'a, T, A>: Sync, VacantEntry<'a, T, A>: Sync,

§

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

§

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

§

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

§

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

§

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

§

impl<'a, T, F, A> Sync for lib::collections::vec_deque::ExtractIf<'a, T, F, A>
where &'a mut VecDeque<T, A>: Sync, F: Sync,

§

impl<'a, T, R, F, A> Sync for lib::collections::btree_set::ExtractIf<'a, T, R, F, A>
where F: Sync, ExtractIfInner<'a, T, SetValZST, R>: Sync, A: Sync,

§

impl<'a, T, S, A> Sync for lib::collections::hash_set::Difference<'a, T, S, A>
where Iter<'a, T>: Sync, &'a HashSet<T, S, A>: Sync,

§

impl<'a, T, S, A> Sync for lib::collections::hash_set::Entry<'a, T, S, A>
where OccupiedEntry<'a, T, S, A>: Sync, VacantEntry<'a, T, S, A>: Sync,

§

impl<'a, T, S, A> Sync for lib::collections::hash_set::Intersection<'a, T, S, A>
where Iter<'a, T>: Sync, &'a HashSet<T, S, A>: Sync,

§

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

§

impl<'a, T, S, A> Sync for lib::collections::hash_set::SymmetricDifference<'a, T, S, A>
where Chain<Difference<'a, T, S, A>, Difference<'a, T, S, A>>: Sync,

§

impl<'a, T, S, A> Sync for lib::collections::hash_set::Union<'a, T, S, A>
where Chain<Iter<'a, T>, Difference<'a, T, S, A>>: Sync,

§

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

§

impl<'a, T> !Sync for BorrowedCursor<'a, T>

§

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

§

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

§

impl<'a, T> Sync for Choose<'a, T>
where &'a [T]: Sync,

§

impl<'a, T> Sync for lib::sync::mpmc::Iter<'a, T>
where &'a Receiver<T>: Sync,

§

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

§

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

§

impl<'a, T> Sync for lib::collections::btree_set::Iter<'a, T>
where Keys<'a, T, SetValZST>: Sync,

§

impl<'a, T> Sync for lib::core::result::Iter<'a, T>
where Option<&'a T>: Sync,

§

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

§

impl<'a, T> Sync for lib::core::result::IterMut<'a, T>

§

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

§

impl<'a, T> Sync for lib::collections::btree_set::SymmetricDifference<'a, T>
where MergeIterInner<Iter<'a, T>>: Sync,

§

impl<'a, T> Sync for lib::sync::mpmc::TryIter<'a, T>
where &'a Receiver<T>: Sync,

§

impl<'a, T> Sync for lib::collections::btree_set::Union<'a, T>
where MergeIterInner<Iter<'a, T>>: Sync,

§

impl<'a, const N: usize> Sync for CharArraySearcher<'a, N>
where <MultiCharEqPattern<[char; N]> as Pattern>::Searcher<'a>: Sync,

§

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

§

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

§

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

§

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

§

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

§

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

§

impl<'a> Sync for lib::text::str::Bytes<'a>

§

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

§

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

§

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

§

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

§

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

§

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

§

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

§

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

§

impl<'a> Sync for EscapeDebug<'a>

§

impl<'a> Sync for EscapeDefault<'a>

§

impl<'a> Sync for EscapeUnicode<'a>

§

impl<'a> Sync for Incoming<'a>

§

impl<'a> Sync for IndexVecIter<'a>

§

impl<'a> Sync for lib::text::str::Lines<'a>

§

impl<'a> Sync for LinesAny<'a>

§

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

§

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

§

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

§

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

§

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

§

impl<'a> Sync for SplitAsciiWhitespace<'a>

§

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

§

impl<'a> Sync for SplitWhitespace<'a>

§

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

§

impl<'a> Sync for Utf8Chunk<'a>

§

impl<'a> Sync for Utf8Chunks<'a>

§

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

§

impl<'b, T> !Sync for lib::core::cell::Ref<'b, T>

§

impl<'b, T> !Sync for lib::core::cell::RefMut<'b, T>

§

impl<'data, T> Sync for BorrowedBuf<'data, T>
where &'data mut [MaybeUninit<T>]: Sync,

§

impl<'scope, 'env> Sync for lib::sync::thread::Scope<'scope, 'env>

§

impl<'scope, T> Sync for lib::sync::thread::ScopedJoinHandle<'scope, T>
where JoinInner<'scope, T>: Sync,

§

impl<A> Sync for lib::core::option::IntoIter<A>
where Item<A>: Sync,

§

impl<A> Sync for OptionFlatten<A>
where Option<A>: Sync,

§

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

§

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

§

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

§

impl<D, F, T, S> Sync for Map<D, F, T, S>
where D: Sync, F: Sync, PhantomData<fn(T) -> S>: Sync,

§

impl<D, R, T> Sync for lib::rand::distr::Iter<D, R, T>
where D: Sync, R: Sync, PhantomData<T>: Sync,

§

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

§

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

§

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

§

impl<G> Sync for BlockRng<G>
where <G as Generator>::Output: Sync, G: Sync,

§

impl<H> Sync for BuildHasherDefault<H>
where PhantomData<fn() -> H>: Sync,

§

impl<Idx> Sync for lib::core::ops::Range<Idx>
where Idx: Sync,

§

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

§

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

§

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

§

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

§

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

§

impl<K, V, A> Sync for BTreeMap<K, V, A>
where Option<NodeRef<Owned, K, V, LeafOrInternal>>: Sync, ManuallyDrop<A>: Sync, PhantomData<Box<(K, V), A>>: Sync,

§

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

§

impl<K, V, A> Sync for lib::collections::btree_map::IntoIter<K, V, A>
where LazyLeafRange<Dying, K, V>: Sync, A: Sync,

§

impl<K, V, A> Sync for lib::collections::hash_map::IntoKeys<K, V, A>
where IntoIter<K, V, A>: Sync,

§

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

§

impl<K, V, A> Sync for lib::collections::hash_map::IntoValues<K, V, A>
where IntoIter<K, V, A>: Sync,

§

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

§

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

§

impl<P> Sync for MaybeDangling<P>
where P: Sync + ?Sized,

§

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

§

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

§

impl<R> Sync for RngReader<R>
where R: Sync,

§

impl<R> Sync for UnwrapErr<R>
where R: Sync,

§

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

§

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

§

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

§

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

§

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

§

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

§

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

§

impl<T, A> Sync for VecDeque<T, A>
where RawVec<T, A>: 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>

§

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

§

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

§

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

§

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

§

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

§

impl<T> Sync for Discriminant<T>

§

impl<T> Sync for lib::core::result::IntoIter<T>
where Option<T>: Sync,

§

impl<T> Sync for lib::sync::mpmc::IntoIter<T>
where Receiver<T>: Sync,

§

impl<T> Sync for LocalKey<T>
where fn(Option<&mut Option<T>>) -> *const T: Sync,

§

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

§

impl<T> Sync for MaybeUninit<T>
where ManuallyDrop<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 PoisonError<T>
where T: Sync,

§

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

§

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

§

impl<T> Sync for lib::sync::oneshot::RecvTimeoutError<T>
where Receiver<T>: Sync,

§

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

§

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

§

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

§

impl<T> Sync for SyncSender<T>
where Sender<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 lib::sync::TryLockError<T>
where PoisonError<T>: Sync,

§

impl<T> Sync for lib::sync::oneshot::TryRecvError<T>
where Receiver<T>: Sync,

§

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

§

impl<T> Sync for Yeet<T>
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 BufWriter<W>: Sync, W: ?Sized,

§

impl<X> Sync for Uniform<X>
where <X as SampleUniform>::Sampler: Sync,

§

impl<X> Sync for UniformFloat<X>
where X: Sync,

§

impl<X> Sync for UniformInt<X>
where X: Sync,

§

impl<X> Sync for WeightedIndex<X>
where Vec<X>: Sync, X: Sync, <X as SampleUniform>::Sampler: Sync,

§

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