ファイル名の配列があり、各プロセスは1つのファイルのみを作成して書き込む必要があります。スレッドセーフな方法でファイルを作成する
これは私がに来たものです:
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:(現在のスレッドがファイルを作成した場合、私がチェックする他の信頼できる方法が表示されていないので、私はfilesize
を使用しています:簡単に
UPD 2を議論するためにラベルを追加しましたまだ空です)
UPD 3:解決策は、である必要があります。
これを行うことでどのような問題を解決しようとしていますか? – cgTag
@Mathew Foscarini:同時実行性の同期化をしていないサードパーティのリソースを管理しています。 – zerkms