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.
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
deadlocksPrevented*: int
-
counts the number of times a deadlock has been prevented
maxLocksPerThread* = 10
-
max number of locks a thread can hold at the same time; this limit is only relevant when compiled with -d:preventDeadlocks.
proc InitLock*(lock: var TLock) {.inline.}
-
Initializes the given lock.
proc DeinitLock*(lock: var TLock) {.inline.}
-
Frees the resources associated with the lock.
proc TryAcquire*(lock: var TLock): bool
-
Tries to acquire the given lock. Returns true on success.
proc Acquire*(lock: var TLock)
-
Acquires the given lock.
proc Release*(lock: var TLock)
-
Releases the given lock.
proc InitCond*(cond: var TCond) {.inline.}
-
Initializes the given condition variable.
proc DeinitCond*(cond: var TCond) {.inline.}
-
Frees the resources associated with the lock.
proc wait*(cond: var TCond; lock: var TLock) {.inline.}
-
waits on the condition variable cond.
proc signal*(cond: var TCond) {.inline.}
-
sends a signal to the condition variable cond.