gpt4 book ai didi

perl - 我应该如何在 Perl 中实现原子序列?

转载 作者:行者123 更新时间:2023-12-04 15:15:12 25 4
gpt4 key购买 nike

我有以下要求:

  • 该序列对于主机是唯一的(不需要共享增量)
  • 序列必须是单调递增的。
  • 该序列必须跨进程持久。
  • 在多个进程同时处理它的情况下,递增序列必须是原子的。
  • 大多数情况下,文件将被更新并在更新后读取新值。但是,也应该可以在不更新的情况下读取当前值。

  • 我可以将大致完成此操作的 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;
    }

    您可以将其称为 get($file,0)检索序列号而不更改它。

    关于perl - 我应该如何在 Perl 中实现原子序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6298095/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com