//! This module contains a type that can make `Send + !Sync` types `Sync` by //! disallowing all immutable access to the value. //! //! A similar primitive is provided in the `sync_wrapper` crate.
use std::any::Any;
pub(crate) struct SyncWrapper<T> {
value: T,
}
// safety: The SyncWrapper being send allows you to send the inner value across // thread boundaries. unsafeimpl<T: Send> Send for SyncWrapper<T> {}
// safety: An immutable reference to a SyncWrapper is useless, so moving such an // immutable reference across threads is safe. unsafeimpl<T> Sync for SyncWrapper<T> {}
pub(crate) fn into_inner(self) -> T { self.value
}
}
impl SyncWrapper<Box<dyn Any + Send>> { /// Attempt to downcast using `Any::downcast_ref()` to a type that is known to be `Sync`. pub(crate) fn downcast_ref_sync<T: Any + Sync>(&self) -> Option<&T> { // SAFETY: if the downcast fails, the inner value is not touched, // so no thread-safety violation can occur. self.value.downcast_ref()
}
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-08-26)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.