我有一个文件名数组,每个进程只需要创建和写入一个文件。
这就是我的目的:
foreach ($filenames as $VMidFile) {
if (file_exists($VMidFile)) { // A
continue;
}
$fp = fopen($VMidFile, 'c'); // B
if (!flock($fp, LOCK_EX | LOCK_NB)) { // C
continue;
}
if (!filesize($VMidFile)) { // D
// write to the file;
flock($fp, LOCK_UN);
fclose($fp);
break;
}
flock($fp, LOCK_UN);
fclose($fp); // E
}
但我不喜欢我依赖filesize
.
有什么建议以另一种(更好的)方式来做吗?
UPD:添加标签以方便讨论
UPD 2:我正在使用filesize
,因为我没有看到任何其他可靠的方法来检查当前线程是否创建了文件(因此它是空的)
UPD 3:解决方案应该是无条件竞争的。