如果我叫这个脚本
<?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是真的?
发布于 2018-07-24 06:56:25
flock在线程上下文中获得锁(有时甚至整个进程)。多次锁定同一资源将“返回”相同的锁。
这是预期的行为,否则您提供的示例将导致死锁,您无法获得锁并继续,但也不能释放已经获得的锁,因为您已锁定。你得从外面消灭过程。
https://stackoverflow.com/questions/51488868
复制相似问题