【问题标题】:Need help running thread SBCL需要帮助运行线程 SBCL
【发布时间】:2014-01-22 16:12:29
【问题描述】:

我正在 sbcl 上编写一些 lisp 代码,以便在模式守护程序中运行函数。 问题是当我使用函数 sb-thred:make-thread 时,例如如下:

(sb-thread:make-thread (lambda () (progn (sleep 1) (when t (print "background action")))))

我收到以下错误消息:

Not supported in unithread builds. [Condition of type SIMPLE-ERROR]

怎么了? ...感谢您的帮助。

【问题讨论】:

  • 看起来您的 SBCL 是在没有多线程支持的情况下构建的。你在运行 MacOS X 吗?如果是这样,this article 可能会对您有所帮助。
  • 我对 MacPorts 了解不多,无法告诉你,但它看起来像一个基于源代码的包管理器,所以从源代码构建应该是过程的一部分,你只需要了解如何为构建指定选项。值得一提的是,我使用的 Linux 发行版(Gentoo)基于相同的原理,我可以通过设置 threads USE 标志使 SBCL 成为多线程。
  • 听起来你是对的。我正在运行 Mac OS X 小牛。我已经使用 macports 安装了 sbcl(版本 1.1.14)。我该怎么办。也许我必须用 macports (???) 删除 sbcl,然后像你的链接中解释的那样“手动”安装 sbcl? ...我希望它存在另一种方式来做到这一点...
  • 好的。我试图找出答案,我会及时通知您。
  • 不要删除它(因为 SBCL 需要一个 CL 实现来引导自身)从源下载 SBCL 并修改 features.lisp (IIRC) 以添加默认禁用的线程)跨度>

标签: common-lisp sbcl background-thread


【解决方案1】:

SBCL 在 Mac OS X 上默认禁用线程。检查 SBCL 是否使用在 repl 中运行的线程构建

(member :sb-thread *features*)

如果没有,请从源代码编译它(使用您当前的 SBCL)。从安装

sh make.sh --with-sb-thread

【讨论】:

  • 没办法。在编译结束时这条消息:WARNING! Some of the contrib modules did not build successfully or pass their self-test. Failed contribs: sb-posix
  • 我已经报告了这个问题(见https://bugs.launchpad.net/sbcl/+bug/1272398)。不得不说,我没有找到合适的设置,还是无法用sb-thread构建sbcl。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-19
  • 1970-01-01
  • 1970-01-01
  • 2011-08-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多