Вот часть документа sb-thread:terminate-thread
:
Размотка, вызванная TERMINATE-THREAD, является асинхронной, то есть, например.поток, выполняющий
(let (foo)
(unwind-protect
(progn
(setf foo (get-foo))
(work-on-foo foo))
(when foo
;; An interrupt occurring inside the cleanup clause
;; will cause cleanups from the current UNWIND-PROTECT
;; to be dropped.
(release-foo foo))))
, может пропустить вызов RELEASE-FOO, несмотря на то, что GET-FOO вернул true, если прерывание происходит внутри предложения очистки, например.во время выполнения RELEASE-FOO.
Документация написана таким образом, что кажется, что разматывание асинхронного стека означает, что завершение потока может произойти в тот момент, когда поток выполняет условие очистки unwind-protect
, вызываянекоторые части предложения очистки не будут выполнены.
Асинхронный стек разворачивает именно эту вещь или я что-то упустил?Это определение не совсем соответствует моему текущему опыту в асинхронном программировании.