有人可以建议我为什么在下面的代码中打开文件时出错。这些错误从 25 个线程的第 9 次迭代大约一半开始,并且是“打开的文件太多”错误。该错误仅在线程中运行时发生,并且仅在使用 DBI 连接/断开连接时发生。这根本不应该影响打开的文件计数吗?我对 Perl 还很陌生,所以不确定我是否做了一些奇怪的事情。这是在 Perl 5.8.8 上。在 Solaris 10 上。
use threads ();
use DBI;
use DBD::Oracle;
my $thrds=25;
my $iter=10;
my @threads;
for (my $j=0; $j<$iter; $j++) {
&start($j);
}
sub start {
my $k=$_[0];
for (my $i=0; $i<$thrds; $i++) {
$threads[$i] = threads->new(\&RunThread,$k, $i);
}
for (my $i=0; $i<$thrds; $i++) { $threads[$i]->join; }
}
sub RunThread {
my $dbh = DBI->connect("dbi:Oracle:lnrmsd9.world", "rms_reader", "rms_reader") or die "failed connect";
my ($x, $y)=@_;
open (my $fh, ">/tmp/da") or die "failed $! at iter $x thread $y";
close ($fh);
$dbh->disconnect;
}