如果我调用此脚本
<?php
$file = 'file.txt';
$fp = fopen($file,'w');
if (flock($fp, LOCK_EX)) {
echo "A";
}
if (flock($fp, LOCK_EX)) {
echo "B";
}
我希望这个文件永远不会停止加载,因为第一个锁永远不会释放,脚本应该在第二个if语句中永远等待。但是,脚本使我惊讶,结果如下:
AB
为什么第二个flock
是正确的?
答案 0 :(得分:2)
flock
在线程上下文(有时甚至是整个过程)中获取锁。多次锁定相同的资源将“返回”相同的锁定。
这是预期的行为,否则您提供的示例将以死锁结束,您无法获取锁并继续,但是由于您已被锁定,因此无法释放已获取的锁。您将不得不从外部终止进程。