lisp - SBCL 多线程写入标准输出

标签 lisp common-lisp sbcl

我编写了一个服务器,用于生成新线程。其中一些线程需要写入标准输出,但当它们写入时,终端中不会显示任何内容。

sbcl 中是否有某种类型的消息传递 api 允许我将消息发送回主线程?

非常感谢!

最佳答案

您需要以某种方式将当前的*standard-output* 传递给新线程,然后在该线程的函数中,您可以将*standard-output* 绑定(bind)到该线程值(value)。

当前的 Common Lisp 实现进行线程本地动态绑定(bind),并且 SBCL is one of them .

(sb-thread:make-thread ;; thread function
                       #'(lambda (standard-output)
                           ;; thread-local dynamic binding of special variable
                           (let ((*standard-output* standard-output))
                             ...))
                       ;; thread function argument, provided by the current thread
                       :arguments (list *standard-output*))

请注意,我可以将线程函数的参数命名为 *standard-output* 然后我就不需要 let,因为动态绑定(bind)是在函数中完成的入口。但我认为动态绑定(bind)应该是明确和明显的,尽管围绕特殊变量命名约定的耳罩。

关于lisp - SBCL 多线程写入标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27178642/

相关文章:

LISP 列表和范式

lisp - 关于 Lisp 和包的新手问题

Clojure 字符串返回值

docker - 从 SBCL Common Lisp 中执行 'docker run'

在 Emacs 上调试 Maxima CAS Lisp 代码

lisp - 如何在普通 lisp 中将 double-float 转换为字节数组,反之亦然?

lisp - 通用 LISP (SBCL) : Returning values from within loops

lisp - 函数错误地返回 Nil

dll - 从 lisp 脚本、工作目录和路径加载库

scope - Lisp函数和/或let语句中的函数和变量的范围