struct RwLock {
    writer: Option<ThreadId>,
    readers: FxHashMap<ThreadId, usize>,
    writer_queue: VecDeque<ThreadId>,
    reader_queue: VecDeque<ThreadId>,
    data_race: VClock,
    data_race_reader: 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.

data_race: VClock

Data race handle 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.

data_race_reader: VClock

Data race handle 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.

Trait Implementations

Formats the value using the given formatter. Read more
Returns the “default value” for a type. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.

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: 168 bytes