我有一个文件名数组,每个进程只需要创建和写入一个文件。以线程安全的方式创建文件
这就是我来:
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:该解决方案应该条件种族免费。
你试图通过这样做解决什么问题? – cgTag
@Mathew Foscarini:它管理没有并发同步的第三方资源。 – zerkms