struct StoreElement {
store_index: VectorIdx,
is_seqcst: bool,
timestamp: VTimestamp,
val: Option<Scalar>,
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: Option<Scalar>
The value of this store. None
means uninitialized.
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,
) -> Option<Scalar>
fn load_impl( &self, index: VectorIdx, clocks: &ThreadClockSet, is_seqcst: bool, ) -> Option<Scalar>
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 for StoreElement
impl PartialEq for StoreElement
impl Eq for StoreElement
impl StructuralPartialEq for StoreElement
Auto Trait Implementations§
impl !Freeze for StoreElement
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)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