Macro | Package: excl | ToC | DocOverview | CGDoc | RelNotes | FAQ | Index | PermutedIndex
| Allegro CL version 9.0 Minimally revised from 8.2. 8.2 version

## critical-section

Arguments: (&key block non-smp) &body body

This macro expands into code that uses a unique basic-lock associated with the expansion to control execution of the body code. Only one process at a time can acquire ownership of the lock and execute the forms in body. Ownership of the lock is relinquished when control leaves body by falling through or by non-local exit. The result of evaluating the critical-section code is the result of the last form in body.

The arguments are:

- block: used for special internal functions. Users should not specify a value for this argument.
- non-smp: what code to generate in a non-smp lisp. Legal values are:
  - `:without-scheduling`: to get the equivalent of `(mp:without-scheduling . body)`
  - `:without-interrupts`: to get the equivalent of `(excl:without-interrupts . body)`
  - `:atomically`: to get the equivalent of `(excl::atomically . body)`
  - [omitted]: to get object-locking code like SMP. This may be inefficient or even problematic in a non-SMP Lisp.

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 has had minimal revisions compared to the 8.2 page.
Created 2019.8.20.

|  | ToC | DocOverview | CGDoc | RelNotes | FAQ | Index | PermutedIndex
| Allegro CL version 9.0 Minimally revised from 8.2. 8.2 version