【问题标题】:How to share a filehandle between threads in Perl?如何在 Perl 中的线程之间共享文件句柄?
【发布时间】:2015-02-04 08:12:59
【问题描述】:

我有两个线程,

一个使用 HTTP::Daemon 运行循环,另一个运行基于 IO::Select 的套接字服务器。

现在,当用户连接到 HTTP 服务时,它需要写入套接字服务器的客户端。

但是,在 Perl 中,我无法与 threads::shared 共享文件句柄。

有什么建议吗?

【问题讨论】:

  • 需要更多关于你在做什么的细节。你可能会发现你可以通过Thread::Queue 传递文件句柄,我更喜欢threads::shared

标签: perl sockets http


【解决方案1】:

文件描述符 对进程来说是全局的,您可以使用fileno 将文件句柄取消引用到它的描述符。然后只需在线程之间传递那个简单的标量值并按数字重新打开即可。

在您的HTTP::Daemon 线程中:

my $fileno = fileno $fh; 

通过您的程序使用的任何方式(例如共享数组)将数字传递给IO::Select 线程。并在IO::Select线程中按编号重新打开句柄:

open my $fh, "&=$fileno";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 2010-09-13
    • 2013-06-04
    • 2012-01-22
    • 2014-01-15
    • 2021-11-11
    相关资源
    最近更新 更多