Struct qutex::QrwLock [] [src]

pub struct QrwLock<T> { /* fields omitted */ }

A queue-backed read/write data lock.

As with any queue-backed system, deadlocks must be carefully avoided when interoperating with other queues.

Methods

impl<T> QrwLock<T>
[src]

Creates and returns a new QrwLock.

Returns a new FutureReadGuard which can be used as a future and will resolve into a ReadGuard.

Returns a new FutureWriteGuard which can be used as a future and will resolve into a WriteGuard.

Pushes a lock request onto the queue.

Returns a mutable reference to the inner Vec if there are currently no other copies of this QrwLock.

Since this call borrows the inner lock mutably, no actual locking needs to take place---the mutable borrow statically guarantees no locks exist.

Returns a reference to the inner value.

This is fraught with potential peril.

Returns a mutable reference to the inner value.

Drinking water from the tap in 1850's London would be safer.

Pops the next lock request in the queue if possible.

If this lock is released, read or write-locks this lock and unparks the next requester task in the queue.

If this lock is write-locked, this function does nothing.

If this lock is read-locked and the next request or consecutive requests in the queue are read requests, those requests will be fulfilled, unparking their respective tasks and incrementing the read-lock count appropriately.

Converts a single read lock (read count of '1') into a write lock.

Returns an error containing a oneshot receiver if there is currently more than one read lock. When the read count reaches one, the receiver channel will be completed (i.e. poll it).

Panics if there are no read locks.

Do not call this method directly unless you are using a custom guard or are otherwise managing the lock state manually. Use ReadGuard::upgrade instead.

Converts a write lock into a read lock then processes the queue, allowing additional read requests to acquire locks.

Use WriteGuard::downgrade rather than calling this directly.

Decreases the reader count by one and unparks the next requester task in the queue if possible.

If a reader is waiting to be upgraded and the read lock count reaches 1, the upgrade sender will be completed.

Unlocks this lock and unparks the next requester task in the queue if possible.

Trait Implementations

impl<T> From<T> for QrwLock<T>
[src]

Performs the conversion.

impl<T> Clone for QrwLock<T>
[src]

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more