Struct miri::concurrency::weak_memory::StoreBuffer
source · pub(super) struct StoreBuffer {
buffer: VecDeque<StoreElement>,
}
Fields§
§buffer: VecDeque<StoreElement>
Implementations§
source§impl<'mir, 'tcx: 'mir> StoreBuffer
impl<'mir, 'tcx: 'mir> StoreBuffer
fn new(init: Scalar<Provenance>) -> Self
sourcefn read_from_last_store(
&self,
global: &DataRaceState,
thread_mgr: &ThreadManager<'_, '_>,
is_seqcst: bool
)
fn read_from_last_store( &self, global: &DataRaceState, thread_mgr: &ThreadManager<'_, '_>, is_seqcst: bool )
Reads from the last store in modification order
fn buffered_read( &self, global: &DataRaceState, thread_mgr: &ThreadManager<'_, '_>, is_seqcst: bool, rng: &mut (impl Rng + ?Sized), validate: impl FnOnce() -> InterpResult<'tcx> ) -> InterpResult<'tcx, (Scalar<Provenance>, LoadRecency)>
fn buffered_write( &mut self, val: Scalar<Provenance>, global: &DataRaceState, thread_mgr: &ThreadManager<'_, '_>, is_seqcst: bool ) -> InterpResult<'tcx>
sourcefn fetch_store<R: Rng + ?Sized>(
&self,
is_seqcst: bool,
clocks: &ThreadClockSet,
rng: &mut R
) -> (&StoreElement, LoadRecency)
fn fetch_store<R: Rng + ?Sized>( &self, is_seqcst: bool, clocks: &ThreadClockSet, rng: &mut R ) -> (&StoreElement, LoadRecency)
Selects a valid store element in the buffer.
sourcefn store_impl(
&mut self,
val: Scalar<Provenance>,
index: VectorIdx,
thread_clock: &VClock,
is_seqcst: bool
)
fn store_impl( &mut self, val: Scalar<Provenance>, index: VectorIdx, thread_clock: &VClock, is_seqcst: bool )
ATOMIC STORE IMPL in the paper (except we don’t need the location’s vector clock)
Trait Implementations§
source§impl Clone for StoreBuffer
impl Clone for StoreBuffer
source§fn clone(&self) -> StoreBuffer
fn clone(&self) -> StoreBuffer
Returns a copy of the value. Read more
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moresource§impl Debug for StoreBuffer
impl Debug for StoreBuffer
source§impl PartialEq<StoreBuffer> for StoreBuffer
impl PartialEq<StoreBuffer> for StoreBuffer
source§fn eq(&self, other: &StoreBuffer) -> bool
fn eq(&self, other: &StoreBuffer) -> bool
This method tests for
self
and other
values to be equal, and is used
by ==
.impl Eq for StoreBuffer
impl StructuralEq for StoreBuffer
impl StructuralPartialEq for StoreBuffer
Auto Trait Implementations§
impl !RefUnwindSafe for StoreBuffer
impl !Send for StoreBuffer
impl !Sync for StoreBuffer
impl Unpin for StoreBuffer
impl UnwindSafe for StoreBuffer
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
Mutably borrows from an owned value. Read more
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: 32 bytes