5.8 Atomic Execution
(require ffi/unsafe/atomic) | package: base |
procedure
(start-atomic) → void?
procedure
(end-atomic) → void?
Disables and enables context switches and delivery of break exceptions
at the level of Racket threads. Calls to start-atomic and
end-atomic can be nested.
Using call-as-atomic is somewhat safer, in that call-as-atomic correctly catches exceptions and re-raises them after exiting atomic mode. For simple uses where exceptions need not be handled, however, start-atomic and end-atomic are faster.
procedure
procedure
Like start-atomic and end-atomic, but the delivery
of break exceptions is not suspended. To ensure that a call to
start-atomic is reliably paired with a call to
end-atomic, use dynamic-wind pre- and post thunks or
some other context where breaks are disabled. These variants are not
faster than plain start-atomic and end-atomic.
procedure
(call-as-atomic thunk) → any
thunk : (-> any)
Calls thunk in atomic mode. If thunk raises an
exception, the exception is caught and re-raised after exiting atomic
mode.
When call-as-atomic is used in the dynamic extent of call-as-atomic, then thunk is simply called directly (as a non-tail call).
procedure
(call-as-nonatomic thunk) → any
thunk : (-> any)
Within the dynamic extent of a call-as-atomic, calls
thunk in non-atomic mode. Beware that the current thread
may be suspended or terminated by other threads during the
execution of thunk, in which case the call never returns.
When used not in the dynamic extent of call-as-atomic, call-as-nonatomic raises exn:fail:contract.
procedure
Returns #t if Racket context switches are disabled,
#f otherwise.