Chr*_*s R 6 parallel-processing perl sequences atomic
我有以下要求:
我可以将perl代码整合在一起,大致可以做到这一点,但我想要一个更优雅的解决方案.
将序列号存储在文件中,并flock确保只有一个进程可以访问它:
sub set { # seed the sequence number file
my ($file, $number) = @_;
open my $fh, '>', $file;
print $fh $number;
} # implicit close
sub get {
my $file = shift;
my $incr = @_ ? shift : 1; # get($f) is like get($f,1)
open my $lock, '>>', "$file.lock";
flock $lock, 2;
open my $fh, '<', $file;
my $seq = <$fh>;
close $fh;
set($file, $seq+$incr) if $incr; # update sequence number
close $lock;
return $seq;
}
Run Code Online (Sandbox Code Playgroud)
您可以将其称为get($file,0)检索序列号而不更改它.