羊群总是 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" 相同的锁。
这是预期的行为,否则您提供的示例将以死锁结束,您无法获取锁并继续,但也无法释放已获取的锁,因为您已被锁定。您将不得不从外部终止进程。
如果我调用这个脚本
<?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" 相同的锁。
这是预期的行为,否则您提供的示例将以死锁结束,您无法获取锁并继续,但也无法释放已获取的锁,因为您已被锁定。您将不得不从外部终止进程。