【问题标题】:Perl Open and Flock timeoutPerl 打开和集群超时
【发布时间】:2017-08-12 09:02:32
【问题描述】:

Perl 中的“open”函数是否会自动检查文件是否被锁定并等待解锁?如果是这样,它会等待多长时间,或者我如何控制这段时间?

我有 5 个分叉进程将数据附加到同一个文件。每个分叉的进程基本上都会打开文件,然后将其聚集在一起。然后它会附加其数据并关闭文件处理程序以解锁文件,以便其他分叉进程可以使用它。

一切都按预期进行,但我担心如果其中一个分叉进程需要很长时间才能完成其任务,则打开命令可能会超时。

【问题讨论】:

  • 查看flock 示例,包括最后关于fork 调用的注释

标签: perl flock


【解决方案1】:

flock 只防止使用flock 获得锁;它不会阻止文件被打开、读取、修改或删除。

没有LOCK_NB 标志的flock 将阻塞,直到获得锁或被信号中断。

带有LOCK_NB 标志的flock 将立即返回。

  • 如果flock 能够获得锁,则返回true。
  • 如果flock 无法获得锁,它将返回false,并设置errno
    • $!{EINTR} 表示操作被信号中断。
    • $!{EWOULDBLOCK} 表示需要等待,但指定了 LOCK_NB

【讨论】:

  • 我明白了。如何让分叉进程检查文件是否有锁,然后等到文件解锁,以便将其数据写入文件?
  • 没关系,你刚刚回答了我的问题。我现在只是有一个疑问,flock 会等待多长时间才能放弃等待解锁文件?
  • 我已经明确指定flock 在我的回答中返回的条件。没有LOCK_NB,它会一直等到被信号打断。
【解决方案2】:

不,open 根本不与锁交互。锁定文件只是防止其他人锁定它,没有别的。

【讨论】:

    猜你喜欢
    • 2012-03-11
    • 1970-01-01
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 2018-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多