【发布时间】:2016-03-18 12:16:47
【问题描述】:
PHP 手册说调用flock 如果锁定成功则返回TRUE,否则返回FALSE。如果文件被其他进程阻塞,则flock应该等到它被解除阻塞(因为我们不使用LOCK_NB)。文档中没有关于超时的内容,它可以中断等待,因此显然flock会无限等待直到获得锁定。
但有时我在多线程脚本中从flock() 得到FALSE。这是什么原因?
【问题讨论】:
-
可能是因为“所有访问程序都必须使用相同的锁定方式,否则将无法正常工作”?
-
False 如果除了“它已经获得”之外没有获得锁的原因,例如例如“操作系统不允许我检查文件是否被锁定”。
-
如果您想获得任何信息而不是盲目(并且不太可能回答您)猜测,您必须提供更多详细信息,例如您的操作系统、您尝试
flock()的资源类型并进一步阐明您所说的“有时”是什么意思。 -
多线程 PHP?虽然它可能是非常不寻常的,但在这种情况下,你应该以这种不经意的方式提及它,这很奇怪。尤其是当它经常与异步 I/O 并驾齐驱时(这对锁定有进一步的复杂性)。你能澄清一下你为多线程使用的扩展吗?
-
我在 FreeBSD 下使用 pcntl_fork()。一般来说,我想知道,如果flock 应该等到锁空闲,怎么可能得到FALSE。
标签: php