SBCL多线程写入标准输出

时间:2014-11-27 21:06:10

标签: lisp common-lisp sbcl

我写了一个旋转新线程的服务器。其中一些线程需要写入标准输出,但是当它们执行时,终端中不会显示任何内容。

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

非常感谢!

1 个答案:

答案 0 :(得分:10)

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

当前Common Lisp实现使线程局部动态绑定和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,因为动态绑定是在函数入口处完成的。但我认为动态绑定应该是明确而明显的,尽管有特殊变量命名约定的耳罩。