| Allegro CL version 9.0 Unrevised from 8.2 to 9.0. 8.2 version |
Arguments: (struct &key block non-smp typecheck timeout) &body body
This macro expands into code that waits until the executing process acquires control of the structure object, then evaluates the forms in the body as an implicit progn. It then releases control of the object and returns whatever values the last form in the body returned.
The arguments are:
synchronizing-structure
or of a subtype of synchronizing-structure
.
nil
or a real
number. If nil
(or unspecified), the body
will be evaluated if and when the lock is acquired. A value greater
than 0 specifies a timeout of that many seconds; when the timeout
occurs before the lock is acquired, the body is not evaluated and the
entire form evaluates to nil
. A value less
than or equal to 0 specifies an immediate timeout; the body is
evaluated only if the lock can be acquired with no delay. If the body
itself return nil
, one cannot then tell from
the return value whether the body executed or not. See
mp:with-process-lock for
an example where timing out causes additional code to run which can
make clear whether the body did or did not execute.
It is not an error for a process that already owns an object to try to lock it again. When this happens, the object is not released at the end of the body code.
The release of the object is performed in an unwind-protect cleanup form, so non-local exits from body are allowed.
See smp.htm and multiprocessing.htm for more information on this macro and on multiprocessing.
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 |