Struct miri::concurrency::weak_memory::StoreElement
source · [−]struct StoreElement {
store_index: VectorIdx,
is_seqcst: bool,
timestamp: VTimestamp,
val: ScalarMaybeUninit<Provenance>,
loads: RefCell<FxHashMap<VectorIdx, VTimestamp>>,
}Fields
store_index: VectorIdxThe identifier of the vector index, corresponding to a thread that performed the store.
is_seqcst: boolWhether this store is SC.
timestamp: VTimestampThe timestamp of the storing thread when it performed the store
val: ScalarMaybeUninit<Provenance>The value of this store
loads: RefCell<FxHashMap<VectorIdx, VTimestamp>>Timestamp of first loads from this store element by each thread Behind a RefCell to keep load op take &self
Implementations
sourceimpl StoreElement
impl StoreElement
sourcefn load_impl(
&self,
index: VectorIdx,
clocks: &ThreadClockSet
) -> ScalarMaybeUninit<Provenance>
fn load_impl(
&self,
index: VectorIdx,
clocks: &ThreadClockSet
) -> ScalarMaybeUninit<Provenance>
ATOMIC LOAD IMPL in the paper Unlike the operational semantics in the paper, we don’t need to keep track of the thread timestamp for every single load. Keeping track of the first (smallest) timestamp of each thread that has loaded from a store is sufficient: if the earliest load of another thread happens before the current one, then we must stop searching the store buffer regardless of subsequent loads by the same thread; if the earliest load of another thread doesn’t happen before the current one, then no subsequent load by the other thread can happen before the current one.
Trait Implementations
sourceimpl Clone for StoreElement
impl Clone for StoreElement
sourcefn clone(&self) -> StoreElement
fn clone(&self) -> StoreElement
Returns a copy of the value. Read more
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from source. Read more
sourceimpl Debug for StoreElement
impl Debug for StoreElement
sourceimpl PartialEq<StoreElement> for StoreElement
impl PartialEq<StoreElement> for StoreElement
sourcefn eq(&self, other: &StoreElement) -> bool
fn eq(&self, other: &StoreElement) -> bool
This method tests for self and other values to be equal, and is used
by ==. Read more
sourcefn ne(&self, other: &StoreElement) -> bool
fn ne(&self, other: &StoreElement) -> bool
This method tests for !=.
impl Eq for StoreElement
impl StructuralEq for StoreElement
impl StructuralPartialEq for StoreElement
Auto Trait Implementations
impl !RefUnwindSafe for StoreElement
impl Send for StoreElement
impl !Sync for StoreElement
impl Unpin for StoreElement
impl UnwindSafe for StoreElement
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
fn vzip(self) -> V
Layout
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference’s “Type Layout” chapter for details on type layout guarantees.
Size: 88 bytes