Struct miri::concurrency::weak_memory::StoreBuffer
source · [−]pub(super) struct StoreBuffer {
buffer: VecDeque<StoreElement>,
}
Fields
buffer: VecDeque<StoreElement>
Implementations
sourceimpl<'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
sourceimpl Clone for StoreBuffer
impl Clone for StoreBuffer
sourcefn clone(&self) -> StoreBuffer
fn clone(&self) -> StoreBuffer
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 moresourceimpl Debug for StoreBuffer
impl Debug for StoreBuffer
sourceimpl PartialEq<StoreBuffer> for StoreBuffer
impl PartialEq<StoreBuffer> for StoreBuffer
sourcefn eq(&self, other: &StoreBuffer) -> bool
fn eq(&self, other: &StoreBuffer) -> bool
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
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
Mutably borrows from an owned value. Read more
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: 32 bytes