php - 为什么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”行。在这种情况下,当我希望它们做不同的事情时,两个不同的叉子做同样的任务。
解决方案
推荐阅读
- swift - 无法从 Class 更新 Published var
- wordpress - 如何将自定义字段编辑器添加到 wordpress 插件
- javascript - 安装时未定义require - node
- node.js - 如何区分多个键盘就像游戏控制器?
- python - python分组并相应打印
- android - 如何为要在 Android 操作系统上分发的应用程序创建 SDK,但能够隐藏我的部分代码
- cytoscape.js - 在 cytoscapejs 中,如何从集合中获取元素样式?
- mongodb - mongodb集群中的RAM量是否与查询响应速度成正比
- mqtt - Spring Mqtt 从上次读取位置订阅
- javascript - Puppeteer 单击 span 元素中的链接