过去一小时已经过去了,并且无法弄清楚什么是错的。
这是我用来调试问题的代码。
Monitor.php
$fp = fopen("lock.txt", "r+");
$var=flock($fp, LOCK_EX | LOCK_NB);
var_dump($var);
$var=flock($fp, LOCK_SH | LOCK_NB);
var_dump($var);
exit;
locker.php
$fp = fopen("lock.txt", "r+");
sleep(60);
要查看flock是否正常工作,我首先运行locker.php,这样该文件将被锁定60秒,然后我尝试运行monitor.php以查看是否可以锁定。
我获得了TRUE
的独占锁和共享锁。
会出现什么问题?
解决方案:假设打开文件会将其锁定。储物柜应该发出一个羊群来锁定文件。
在匆忙中错过了那一部分。 Deadlines.Deadlines:)
答案 0 :(得分:3)
locker.php 未锁定该文件。打开文件不会锁定它。 flock
是合作顾问锁定系统。所有各方都需要参与其中并使用flock
来锁定和/或检查锁定。除非locker.php明确flock
该文件,否则它不会被锁定。
答案 1 :(得分:1)
在PHP(以及许多UNIX系统)下,flock
是 Advisory,意味着所有进程要使用该文件必须使用锁定。那些没有的人仍然可以对文件做任何他们想做的事情,并且不会阻止其他进程获得锁定。
您的locker
程序应该同时打开和锁定文件,例如:
$fp = fopen("lock.txt", "r+");
$var=flock($fp, LOCK_SH | LOCK_NB);
sleep(60);