multithreading - 波尔多线程 : how to kill a thread?

标签 multithreading lisp common-lisp

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

如何使用 (bt:all-threads) 杀死我能看到的任何线程:
(bt:make-thread (lambda () (loop)) :name "Foo") --> ?

最佳答案

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

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)))

线程只是另一个对象。

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

关于multithreading - 波尔多线程 : how to kill a thread?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31930737/

相关文章:

多线程......函数式语言? (序言)

subprocess - SBCL:在运行时收集运行程序进程的输出

common-lisp - 通用 Lisp : asdf depends-on specific version

c - 使用互斥体时的数据竞争

java - 为什么建立 JDBC 连接会卡住 UI 线程?

java - 更改客户端-服务器应用程序中圆圈的颜色

tree - 查找树中最深的节点 (Lisp)

lisp - 内置不区分大小写的字符串=

lisp - Common Lisp 中的 Uninterned 符号

lisp - "Define"在我的 lisp 编译器(Steel Bank Common Lisp)中未定义