Struct miri::concurrency::weak_memory::StoreElement
source · struct StoreElement {
store_index: VectorIdx,
is_seqcst: bool,
timestamp: VTimestamp,
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: VTimestamp
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§
source§impl 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§
source§impl Clone for StoreElement
impl Clone for StoreElement
source§fn clone(&self) -> StoreElement
fn clone(&self) -> StoreElement
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for StoreElement
impl Debug for StoreElement
source§impl PartialEq<StoreElement> for StoreElement
impl PartialEq<StoreElement> for StoreElement
source§fn eq(&self, other: &StoreElement) -> bool
fn eq(&self, other: &StoreElement) -> bool
self
and other
values to be equal, and is used
by ==
.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§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
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: 104 bytes