struct RwLock {
writer: Option<ThreadId>,
readers: FxHashMap<ThreadId, usize>,
writer_queue: VecDeque<ThreadId>,
reader_queue: VecDeque<ThreadId>,
clock_unlocked: VClock,
clock_current_readers: VClock,
}
Expand description
The read-write lock state.
Fields§
§writer: Option<ThreadId>
The writer thread that currently owns the lock.
readers: FxHashMap<ThreadId, usize>
The readers that currently own the lock and how many times they acquired the lock.
writer_queue: VecDeque<ThreadId>
The queue of writer threads waiting for this lock.
reader_queue: VecDeque<ThreadId>
The queue of reader threads waiting for this lock.
clock_unlocked: VClock
Data race clock for writers. Tracks the happens-before ordering between each write access to a rwlock and is updated after a sequence of concurrent readers to track the happens- before ordering between the set of previous readers and the current writer. Contains the clock of the last thread to release a writer lock or the joined clock of the set of last threads to release shared reader locks.
clock_current_readers: VClock
Data race clock for readers. This is temporary storage for the combined happens-before ordering for between all concurrent readers and the next writer, and the value is stored to the main data_race variable once all readers are finished. Has to be stored separately since reader lock acquires must load the clock of the last write and must not add happens-before orderings between shared reader locks. This is only relevant when there is an active reader.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for RwLock
impl RefUnwindSafe for RwLock
impl Send for RwLock
impl Sync for RwLock
impl Unpin for RwLock
impl UnwindSafe for RwLock
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: 232 bytes