Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 如何检测文件描述符被重新定义为新的文件句柄?_Multithreading_Perl - Fatal编程技术网

Multithreading 如何检测文件描述符被重新定义为新的文件句柄?

Multithreading 如何检测文件描述符被重新定义为新的文件句柄?,multithreading,perl,Multithreading,Perl,在此代码中: 打开我的$fh1,'>','file1'; my$fh1_desc=文件编号$fh1; 收盘价$fh1; 打开我的$fh2,“>”,“文件2”; 打开我的$fh1'>&=',$fh1_desc; 如果(文件号$fh1_==文件号$fh2){ 打印“\$fh1\和\$fh2是重复的\n”; } 之后,$fh1和$fh2指向同一个文件。如何检测文件描述符的重新定义 这是“伪代码”!实际情况是: 当我将文件描述符传递给另一个线程时,我怎么知道它没有被重新定义?一旦关闭文件句柄,数字描述

在此代码中:

打开我的$fh1,'>','file1';
my$fh1_desc=文件编号$fh1;
收盘价$fh1;
打开我的$fh2,“>”,“文件2”;
打开我的$fh1'>&=',$fh1_desc;
如果(文件号$fh1_==文件号$fh2){
打印“\$fh1\和\$fh2是重复的\n”;
}
之后,
$fh1
$fh2
指向同一个文件。如何检测文件描述符的重新定义

这是“伪代码”!实际情况是:

当我将文件描述符传递给另一个线程时,我怎么知道它没有被重新定义?

一旦关闭文件句柄,数字描述符就没有意义,通常只会被下一个打开的线程重新使用,如您所示。我的建议是,当您关闭一个文件时,请确保将所有句柄设置为“undef”,这样您就不会自欺欺人地认为它们仍然有效


但我可能误解了您的问题-您没有提供太多细节。

从不同的线程我们无法访问文件句柄本身。我想在一个线程中读取新的tcp连接,然后在另一个线程中处理它们!我可以传递文件描述符,但是如果某个客户端关闭了他的连接,它可以被重新定义!我认为您需要解决的问题是,当工作线程正在使用的文件句柄被关闭时,如何通知工作线程。我没有做过太多的多线程perl编程,但是看起来您可以使用threads::shared模块在线程之间共享filehandle来解决这个问题,因为filehandles不能与threads::shared共享,所以不是那么容易!