羊群总是 returns 真

flock always returns true

如果我调用这个脚本

<?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 是真的?

flock 获取线程上下文中的锁(有时甚至是整个进程)。多次锁定同一资源将 "return" 相同的锁。

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