perl中的线程与pthread

时间:2012-11-27 15:19:29

标签: multithreading perl pthreads freebsd

我想知道当我从freebsd的端口源编译perl 5.16(以及其他版本)时,选项'THREADS'和'PTHREAD'之间的区别是什么?

PTHREAD是posix-threading吗? (因为-pthread)如果是这样,它是否更喜欢'THREADS'? (因为它似乎是预选的)甚至在freebsd上?那么什么是'THREADS'(内核线程?)?有什么优点和缺点?

我可以在一次安装中使用两者吗?它有意义吗?

据我所知,与perl结合使用并没有太多东西可以找到。

非常感谢 麦

1 个答案:

答案 0 :(得分:18)

正如其他人所描述的那样使用线程。

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

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