| Allegro CL version 9.0 Unrevised from 8.2 to 9.0. 8.2 version |
Arguments: (lock &key timeout norecursive seized whostate) &body body
This macro executes the body with lock
seized. Unlike process-lock,
with-process-lock protects
against a single process trying to seize a lock it already owns. If
executed dynamically inside another with-process-lock for the same lock, and if
norecursive is nil
,
with-process-lock behaves as
if the lock was seized successfully, and the body is executed. If
norecursive is t
, an
error is signaled. The default value of
norecursive is nil
.
The seized argument, if specified, must be a
bound variable. In the macro body, this variable will be set
to nil
if the lock was not already held
and set to t
if it was already held. This
allows avoiding recursion issues.
If a timeout is specified and
non-nil
, the value should be a real number; the
units are seconds. 0 or a negative timeout value times out immediately
(they seize the lock only if it is currently available). A value
of nil
is equivalent to an unspecified
timeout argument. timeout works as it does for
process-lock.
If the form times out before the lock is available, the
with-process-lock form returns
nil
without the body being executed. If you
want to take specific action if the lock does not become available
when timeout is specified, use a form like this:
(block ok (with-process-lock (lock :timeout 10) (return-from ok (progn body-forms ...))) (... action if lock never becomes available ...))
See also process-unlock, process-lock-locker, and make-process-lock.
See About design considerations for event-driven applications in cgide.htm and post-funcall-in-cg-process if you intend to call this function is a Common Graphics process.
See multiprocessing.htm for general information on multiprocessing in Allegro CL and see Process locks for more information on process locks in Allegro CL.
Copyright (c) 1998-2019, Franz Inc. Oakland, CA., USA. All rights reserved.
This page was not revised from the 8.2 page.
Created 2012.5.30.
| Allegro CL version 9.0 Unrevised from 8.2 to 9.0. 8.2 version |