DoxigAlpha

lock

Function parameters

Parameters

#
rwl:*DefaultRwLock

Single-threaded applications use this for deadlock checks in

Types

#
SingleThreadedRwLock
Single-threaded applications use this for deadlock checks in

Attempts to obtain exclusive lock ownership.

Functions

#
tryLock
Attempts to obtain exclusive lock ownership.
lock
Blocks until exclusive lock ownership is acquired.
unlock
Releases a held exclusive lock.
tryLockShared
Attempts to obtain shared lock ownership.
lockShared
Obtains shared lock ownership.
unlockShared
Releases a held shared lock.

Source

Implementation

#
pub fn lock(rwl: *DefaultRwLock) void {
    _ = @atomicRmw(usize, &rwl.state, .Add, WRITER, .seq_cst);
    rwl.mutex.lock();

    const state = @atomicRmw(usize, &rwl.state, .Add, IS_WRITING -% WRITER, .seq_cst);
    if (state & READER_MASK != 0)
        rwl.semaphore.wait();
}