php文件排他锁为什么不起作用?

时间:2019-07-04 12:30:15

标签: php

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

0 个答案:

没有答案