Function: SB-THREAD:GRAB-MUTEX

package type github

Acquire MUTEX for the current thread. If WAITP is true (the default) and the mutex is not immediately available, sleep until it is available.

If TIMEOUT is given, it specifies a relative timeout, in seconds, on how long GRAB-MUTEX should try to acquire the lock in the contested case.

If GRAB-MUTEX returns T, the lock acquisition was successful. In case of WAITP being NIL, or an expired TIMEOUT, GRAB-MUTEX may also return NIL which denotes that GRAB-MUTEX did -not- acquire the lock.

Notes:

  • GRAB-MUTEX is not interrupt safe. The correct way to call it is:

(WITHOUT-INTERRUPTS … (ALLOW-WITH-INTERRUPTS (GRAB-MUTEX …)) …)

WITHOUT-INTERRUPTS is necessary to avoid an interrupt unwinding the call while the mutex is in an inconsistent state while ALLOW-WITH-INTERRUPTS allows the call to be interrupted from sleep.

  • (GRAB-MUTEX :timeout 0.0) differs from (GRAB-MUTEX :waitp nil) in that the former may signal a DEADLINE-TIMEOUT if the global deadline was due already on entering GRAB-MUTEX.

The exact interplay of GRAB-MUTEX and deadlines are reserved to change in future versions.

  • It is recommended that you use WITH-MUTEX instead of calling GRAB-MUTEX directly.

Lambda list

(sb-thread:mutex &key sb-thread::waitp sb-thread::timeout)