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 for StoreBuffer
impl PartialEq 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 StructuralPartialEq for StoreBuffer
Auto Trait Implementations§
impl !DynSend for StoreBuffer
impl !DynSync for StoreBuffer
impl Freeze for StoreBuffer
impl !RefUnwindSafe for StoreBuffer
impl Send for StoreBuffer
impl !Sync for StoreBuffer
impl Unpin for StoreBuffer
impl UnwindSafe for StoreBuffer
Blanket Implementations§
§impl<T> AnyEq for T
impl<T> AnyEq for T
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
source§impl<T, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Checks if this value is equivalent to the given key. Read more
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to
key
and return true
if they are equal.§impl<T> Filterable for T
impl<T> Filterable for T
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<P> IntoQueryParam<P> for P
impl<P> IntoQueryParam<P> for P
fn into_query_param(self) -> P
source§impl<T> MaybeResult<T> for T
impl<T> MaybeResult<T> for T
§impl<T> Pointable for T
impl<T> Pointable for T
source§impl<'tcx, T> ToPredicate<'tcx, T> for T
impl<'tcx, T> ToPredicate<'tcx, T> for T
fn to_predicate(self, _tcx: TyCtxt<'tcx>) -> T
source§impl<Tcx, T> Value<Tcx> for Twhere
Tcx: DepContext,
impl<Tcx, T> Value<Tcx> for Twhere
Tcx: DepContext,
default fn from_cycle_error( tcx: Tcx, cycle_error: &CycleError, _guar: ErrorGuaranteed ) -> T
source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
source§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
impl<'a, T> Captures<'a> for Twhere
T: ?Sized,
impl<'a, T> Captures<'a> for Twhere
T: ?Sized,
impl<T> ErasedDestructor for Twhere
T: 'static,
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