Bordeaux-Threads:如何杀死一个线程?

Bordeaux-Threads: how to kill a thread?

我只找到了如何终止已分配给变量的线程:
(setf *foo* (bt:make-thread (lambda () (loop)) :name "Foo2")) --> (bt:destroy-thread *foo*)

我怎样才能杀死我可以看到的任何线程 (bt:all-threads):
(bt:make-thread (lambda () (loop)) :name "Foo") --> ?

(bt:destroy-thread (nth index (bt:all-threads)))

最好先检查一下线程是否还活着,(bt:thread-alive-p <thread>) 而不是当前线程,(bt:current-thread <thread>) 在杀死它之前..

您可以终止任何线程。没有什么特别的。如果你得到一个线程列表,只需要获取你想要杀死的线程并将它传递给函数即可。

函数destroy-thread没有看到变量。因为它是一个函数,所以 Lisp 使用通常的求值规则。它通过一个线程。该线程恰好是您示例中变量的值。

可能是函数调用的值:

(defun my-thread ()
  *foo*)

(bt:destroy-thread (my-thread))

甚至是数据结构的一部分,例如列表:

(defun my-thread ()
  (list 1 *foo* 3))

(bt:destroy-thread (second (my-thread)))

线程只是另一个对象。

如果您获得线程列表,则需要确定正确的线程。例如通过查看线程的名称。