羊群总是返回true

时间:2018-07-24 00:29:59

标签: php flock

如果我调用此脚本

<?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是正确的?

1 个答案:

答案 0 :(得分:2)

flock在线程上下文(有时甚至是整个过程)中获取锁。多次锁定相同的资源将“返回”相同的锁定。

这是预期的行为,否则您提供的示例将以死锁结束,您无法获取锁并继续,但是由于您已被锁定,因此无法释放已获取的锁。您将不得不从外部终止进程。