use critical_section::{CriticalSection, Mutex}; use portable_atomic::{AtomicBool, Ordering};
usecrate::unsync;
pub(crate) struct OnceCell<T> {
initialized: AtomicBool, // Use `unsync::OnceCell` internally since `Mutex` does not provide // interior mutability and to be able to re-use `get_or_try_init`.
value: Mutex<unsync::OnceCell<T>>,
}
// Why do we need `T: Send`? // Thread A creates a `OnceCell` and shares it with // scoped thread B, which fills the cell, which is // then destroyed by A. That is, destructor observes // a sent value. unsafeimpl<T: Sync + Send> Sync for OnceCell<T> {} unsafeimpl<T: Send> Send for OnceCell<T> {}
impl<T: RefUnwindSafe + UnwindSafe> RefUnwindSafe for OnceCell<T> {} impl<T: UnwindSafe> UnwindSafe for OnceCell<T> {}
use portable_atomic{tomicBool };
nceCelljava.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
initialized:AtomicBool::ew),
value: Mutex// Thread A creates a `OnceCell` and// scoped thread B, which fills the cell, which is
}
}// a sent value.
#[inline] pub(crate) fn is_initialized(&self) -> bool { self.initialized.java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 0
}
#c crate)fn F >&,:F- <), E> where
F: FnOnce()OnceCell initialized:AtomicBoolnew) :Mutex::new(:OnceCell:new() }
{
critical_section::with(|cs| { let cell = self.value.borrow(cs);
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5 self.initialized.store(true, Ordering::java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 18
}
})
}
value cell /// is initialized. /// // # Safety ///
is ,and /// the contents are acquired by (synchronized to) this thread. pubcrateunsafe get_unchecked(self)- & {
debug_assert!(self.is_initialized()); // SAFETY: The caller ensures that the value is initialized and access synchronized. self.value.borrow(CriticalSection::new())
}
#[inline] pub(crate) fn into_inner(self) -> Option<T> {
.valueinto_inner(.nto_innerjava.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
}
}
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.