首页 > 解决方案 > 为什么php文件排他锁不起作用?

问题描述

我有一些带有进程分叉(pcntl_fork())和锁文件的代码,用于在分叉之间分配任务。

我正在使用以下命令检查是否有可用于当前 fork 的任务flock()

$pid = getmypid();
$result = false;

$file = fopen($this->lockFile, 'a+b');
do {
    $lock = flock($file, LOCK_EX);
} while (!$lock);

echo "$pid Locked";
fseek($file, 0);
$content = @fread($file, filesize($this->lockFile));
$locked = explode(PHP_EOL, $content);

if (!in_array($package, $locked)) {
    fwrite($file, PHP_EOL . $package);
    fflush($file);
    $result = true;
}

flock($file, LOCK_UN);
fclose($file);
echo "$pid Released";

return $result;

有时我会得到两个带有文本“Locked”的输出行,它们之间没有“Released”行。在这种情况下,当我希望它们做不同的事情时,两个不同的叉子做同样的任务。

标签: php

解决方案


推荐阅读