Есть ли способ перезапустить поток, который завершил свою задачу, чтобы избежать накладных расходов на создание нового потока для следующей задачи?(Обратите внимание, что все остальные процессоры / потоки будут заняты, и (not (bt:thread-alive-p thread)
сигнализирует, когда поток мертв.) Например, я пробовал bt: interrupt-thread на завершенном потоке, но это не работает:
* (defparameter *x* 0)
*X*
* (let ((thread (bt:make-thread (lambda () (setf *x* (loop for i from 1 to 10 sum i))))))
(sleep 1)
(print *x*)
(bt:interrupt-thread thread (lambda () (setf *x* (loop for i from 1 to 100 sum i))))
(sleep 1)
(print *x*))
55
debugger invoked on a SB-THREAD:INTERRUPT-THREAD-ERROR in thread
#<THREAD "main thread" RUNNING {10012E0613}>:
Interrupt thread failed: thread #<THREAD "Anonymous thread" FINISHED
values: 55 {1005D410D3}> has exited.
Кроме того, есть ли способ получить доступ к результату (в потоке), возвращенному функцией, переданной в bt: make-thread, чтобы избежать необходимости общаться через глобальную переменную, как в примере выше?