| Allegro CL version 10.1 Unrevised from 10.0 to 10.1. 10.0 version |
Arguments: (object &key type block non-smp typecheck) &body body
This macro expands into code that waits until the executing process acquires control of the 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:
lockable-object
or of a
subclass of lockable-object
unless the type argument is
included and specifies otherwise. Object can also be a class object
(an instance of standard-class
). The instances of such
classes are not necessarily lockable; the class would need to inherit
from
lockable-object
for the
instances to be lockable.
:clos
(the default): the object form must evaluate
to an instance of lockable-object
or of a subclass of
lockable-object
.
:struct
: the object form must evaluate to an
instance of synchronizing-structure
or of a subtype of
synchronizing-structure
.
:without-scheduling
to get the equivalent of
(without-scheduling . body)
:without-interrupts
to get the equivalent of
(with-delayed-interrupts . body)
:atomically
(only valid when
the type argument is
:struct
) to get the equivalent
of (fast-and-clean . body)
nil
, the generated code does not include
an explicit typecheck of the object. If specified as
non-nil
the generated code checks that the
object is of the appropriate type. If typecheck
is ommitted, the type check code is generated unless the type argument
is :clos
(explicitly or by default)
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 until the outermost lock form is exited.
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-2022, Franz Inc. Lafayette, CA., USA. All rights reserved.
This page was not revised from the 10.0 page.
Created 2019.8.20.
| Allegro CL version 10.1 Unrevised from 10.0 to 10.1. 10.0 version |