without-scheduling

Arguments: &body body

Significant change starting with a 8.1 patch

Starting with a patch released in July, 2009, use of this macro is
deprecated and a warning will be signaled when the compiler encounters
use of this macro. Because Symmetric Multiprocessing (SMP) will be
introduced into Allegro CL 9.0 on some platforms, use of
multiprocessing macros without-interrupts and sys:without-scheduling, whose behavior is
significantly different in an SMP environment, is deprecated,
particularly for those users who intend to use the SMP
facility. See smp.htm for full details, but in
brief, without-interrupts
and sys:without-scheduling
effectively provided object locking -- because they prevented process
switches, and only one Lisp process could ever run at a time, no
object could be modified by another process while code wrapped in the
macros was being run. In an SMP Lisp, that is no longer true because
processes can run on separate processors simultaneously. Therefore,
object locking must be achieved in some other
fashion. See smp.htm for links to object locking
functionality.

Even though its use is deprecated, sys:without-scheduling and without-interrupts will continue to exist and
work in non-SMP images as they have in earlier releases and
currently. Users who do not wish to use SMP can use non-SMP images,
which will be available on platforms which support SMP along with SMP
images and need not modify their code at all because of the
introduction of SMP (beyond suppressing the compiler warning as
described above).

This macro inhibits the system from suspending a process involuntarily
(asynchronously) during the execution of
body. However, the system will run another
process if the current process blocks, waits, or executes a process-allow-schedule. Note that
without-scheduling returns a
single value, not multiple values. without-scheduling is intended to be used around
short critical sections of code, and perhaps to be called frequently,
so possible overhead of allocating multiple returns is avoided by
returning a single value.