我有一些带有流程分支(pcntl_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”行。在这种情况下,当我希望两个不同的分支执行不同的任务时,它们将执行相同的任务。