9

我想知道当我从 freebsd 中的端口源编译 perl 5.16(和其他版本)时,选项 'THREADS' 和 'PTHREAD' 之间有什么不同?

PTHREAD 是 posix 线程吗?(因为-pthread)如果是这样,它是否更喜欢“线程”?(因为它似乎是预先选择的)即使在freebsd上?另一方面,什么是“线程”(内核线程?)?优缺点都有什么?

我可以在一个安装中同时使用两者吗?有道理吗?

据我所知,与 perl 结合使用的东西并不多。

非常感谢吉米

4

1 回答 1

19

当然,使用线程就像其他人所描述的那样。

与 pthread 的链接意味着您的 perl 是使用 -pthread 标志构建的。这有一个微妙但重要的影响。这意味着当 perl 启动时,为线程维护状态的 libc 数据被初始化。这意味着如果您的 perl 在线程库上调用 dlopen(),它将正常工作,而不是挂起。

PS。我实际上是编写 PTHREAD 选项并将其提交到端口的人。我实际上发现了一些 perl 模块,它们 dlopen()'d 一些线程库并导致 perl 挂起。我花了一段时间才弄清楚为什么。相信我,你想要 PTHREAD 选项。我实际上正在考虑删除将其关闭的选项。有关更多信息,请参阅 FreeBSD PR 163512 和 163878。我们可能应该将此选项推送到上游,以便 perl 在 FreeBSD 上默认使用此选项。任何可能调用 dlopen() 的东西都应该使用 -pthread 构建。

于 2012-11-27T20:29:15.780 回答