我正在研究PHP中的群体机制,我很难理解LOCK_SH模式的功能.我在一个网站上读到它锁定文件,以便其他脚本不能写入,但他们可以从中读取.但是,以下代码似乎没有按预期工作:在file1.php我有:
$fp = fopen('my_file.txt','r');
flock($fp, LOCK_SH);
sleep(20);
flock($fp, LOCK_UN);
Run Code Online (Sandbox Code Playgroud)
在file2.php我有
$fp = fopen('my_file.txt','a');
fwrite($fp,'test');
Run Code Online (Sandbox Code Playgroud)
我运行第一个锁定文件20秒的脚本.在锁定到位的情况下,我运行file2.php,它立即完成执行,之后,当我打开'my_file.txt'时,字符串'test'被附加到它上面(虽然'file1.php'仍在运行).我尝试更改'file2.php',以便它可以从锁定的文件中读取并从中红色,没有任何问题.很显然......'LOCK_SH'接缝无所事事.但是,如果我使用LOCK_EX是,它会锁定文件,没有脚本可以写入或读取文件.我正在使用Easy PHP并在Windows 7下运行它.
wor*_*nga 16
LOCK_SH表示共享锁定.任何数量的进程可能同时具有共享锁定.它通常被称为读卡器锁.
LOCK_EX表示EXCLUSIVE LOCK.一次只有一个进程可能拥有对给定文件的独占锁.
如果文件已在另一个进程中与LOCK_SH锁定,则使用LOCK_SH的群集将成功.与LOCK_EX一起群将阻止所有读取器锁定已释放.
http://php.net/manual/en/function.flock.php#78318