Struct miri::concurrency::weak_memory::StoreElement
source · [−]struct StoreElement {
store_index: VectorIdx,
is_seqcst: bool,
timestamp: u32,
val: Scalar<Provenance>,
load_info: RefCell<LoadInfo>,
}
Fields
store_index: VectorIdx
The identifier of the vector index, corresponding to a thread that performed the store.
is_seqcst: bool
Whether this store is SC.
timestamp: u32
The timestamp of the storing thread when it performed the store
val: Scalar<Provenance>
The value of this store
load_info: RefCell<LoadInfo>
Metadata about loads from this store element, behind a RefCell to keep load op take &self
Implementations
sourceimpl StoreElement
impl StoreElement
sourcefn load_impl(
&self,
index: VectorIdx,
clocks: &ThreadClockSet,
is_seqcst: bool
) -> Scalar<Provenance>
fn load_impl(
&self,
index: VectorIdx,
clocks: &ThreadClockSet,
is_seqcst: bool
) -> Scalar<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
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresourceimpl 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
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 Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<V, T> VZip<V> for Twhere
V: MultiLane<T>,
impl<V, T> VZip<V> for Twhere
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: 96 bytes