perl - 我如何在 Perl 中聚集

标签 perl flock

如果我并行运行以下脚本,我可以看到很少有脚本正在等待获取锁定,但有些脚本正在并行运行。 LOCK_EX 未按预期工作。我不明白这里缺少什么。

$|++;
my $lockHandle;
my $file='lock.txt';
#sysopen( $lockHandle, $file, O_RDWR|O_CREAT);
open($lockHandle, '>>', $file);
print "aquiring lock\n";
my $o = flock $lockHandle,LOCK_EX or die "Could not lock '$file' - $!";
print "Locked....$o\n";

## Only executes when the lock is acquired

my $count=5;
my $intex=0;
while ($index <= $count){
   print "executing\n";
   sleep 1;
   $index=$index+1;
}
END {
 flock $lockHandle, LOCK_UN;
 close $lockHandle;
 unlink $file;
 }

最佳答案

对于初学者,始终使用 use strict;使用警告;!它会发现你的问题。

您忘记导入常量 LOCK_EXLOCK_UN,您可以使用

use Fcntl qw( LOCK_EX LOCK_UN );

(O_RDWRO_CREAT 同样需要从同一模块导入,如果您要使用它们。)

您最终会传递字符串LOCK_EXLOCK_UN,而不是具有这些名称的常量所代表的值。这就是程序因无效参数而终止的原因。

关于perl - 我如何在 Perl 中聚集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72176576/

相关文章:

perl - 为什么通常在没有线程支持的情况下安装Perl?

windows - 如何使用 Strawberry Perl 运行程序?

regex - Perl 替换运算符的作用是什么?

node.js - 如何在 node.js 的单个进程中同步对文件的访问?

python - 有没有等同于 Perl 中取消引用的 Python?

perl - 尝试获取 SSL 证书错误

php - 如何在 Windows 上的 PHP 中锁定目录以进行独占访问?

linux - 许多进程的缓存锁定?

c - 在 Solaris 5.10 上使用集群()