Function WAIT-ON-SEMAPHORE
Syntax:
wait-on-semaphore semaphore &key timeout -> generalized-boolean
Arguments and values:
semaphore -> a
semaphore object.
timeout -> a non-negative real number.
generalized-boolean -> a generalized
boolean.
Description:
Decrement the count of semaphore
by 1 if the count is larger than zero.
If the count is zero, blocks until semaphore
can be decremented.
Returns
true
on success.
If timeout
is given, it is the maximum number of seconds to wait. If
the count cannot be decremented in that time, returns
false
without decrementing the count.
Exceptional situations:
Signals an error of type
type-error
if semaphore
is not a semaphore object.
Signals an error of type
type-error
if timeout
is neither nil nor a non-negative real number.
See also:
make-semaphore, wait-on-semaphore
Notes:
It is unspecified which thread gets a wakeup and does not necessarily relate to the order in which the threads went to sleep.
On Allegro, a non-null timeout
is forced to a minimum of 100ms,
because Allegro does not provide a primitive for waiting with a
timeout, which is emulated using
with-timeout.