Module locks

This module contains Nimrod's support for locks and condition vars. If the symbol preventDeadlocks is defined (compiled with -d:preventDeadlocks) special logic is added to every acquire, tryAcquire and release action that ensures at runtime that no deadlock can occur. This is achieved by forcing a thread to release its locks should it be part of a deadlock. This thread then re-acquires its locks and proceeds.Low level system locks and condition vars.

Types

TLock = TSysLock
Nimrod lock; whether this is re-entrant or not is unspecified! However, compilation in preventDeadlocks-mode guarantees re-entrancy.
TCond = TSysCond
Nimrod condition variable
FLock = object of TEffect
effect that denotes that some lock operation is performed
FAquireLock = object of FLock
effect that denotes that some lock is aquired
FReleaseLock = object of FLock
effect that denotes that some lock is released

Vars

deadlocksPrevented: int
counts the number of times a deadlock has been prevented

Consts

maxLocksPerThread = 10
max number of locks a thread can hold at the same time; this limit is only relevant when compiled with -d:preventDeadlocks.

Procs

proc InitLock(lock: var TLock) {.inline, raises: [], tags: [].}
Initializes the given lock.
proc DeinitLock(lock: var TLock) {.inline, raises: [], tags: [].}
Frees the resources associated with the lock.
proc TryAcquire(lock: var TLock): bool {.tags: [FAquireLock], raises: [].}
Tries to acquire the given lock. Returns true on success.
proc Acquire(lock: var TLock) {.tags: [FAquireLock], raises: [].}
Acquires the given lock.
proc Release(lock: var TLock) {.tags: [FReleaseLock], raises: [].}
Releases the given lock.
proc InitCond(cond: var TCond) {.inline, raises: [], tags: [].}
Initializes the given condition variable.
proc DeinitCond(cond: var TCond) {.inline, raises: [], tags: [].}
Frees the resources associated with the lock.
proc wait(cond: var TCond; lock: var TLock) {.inline, raises: [], tags: [].}
waits on the condition variable cond.
proc signal(cond: var TCond) {.inline, raises: [], tags: [].}
sends a signal to the condition variable cond.
Generated: 2013-05-21 09:55:24 UTC