3

Stack で同様の質問を見つけましたが、それらが PHP に当てはまるかどうかはわかりません。

pcntl_fork() で子プロセスを作成したいと思います。親プロセスと子プロセスの両方からログ ファイルにメッセージを書き込みたい。

親でファイル ハンドルを開いた場合、子から同じハンドルに書き込んでも安全ですか? ファイルに追加するだけであることに注意してください。

特に 2 つのプロセスが異なるコアで実行されている場合に競合状態が発生するのではないかと心配しています。2 つの異なるコアで実行されている 2 つのプロセスが同時に同じファイル ハンドルに書き込むとどうなるでしょうか?

4

1 に答える 1

3

flockまたはstreamWrapper::stream_lock場合によっては または を使用するstream_set_blocking

flock()を使用すると、実質的にすべてのプラットフォーム (ほとんどの Unix 派生物や Windows を含む) で使用できる単純なリーダー/ライター モデルを実行できます。

flockfclose()ファイル リソースで動作し、ファイルのロックが解除されていなくても自動的に閉じられます。

flock($fp, LOCK_EX);

私の場合、使用している書き込み用にファイルを開く準備ができるまで、ループして待つことができますc+

while(! $fp = @fopen($this->file, "c+")) {
    if (time() - $time > $this->timeout)
        throw new Exception("File can not be accessed");
    usleep(100000);
}

$this->timeout基本的に、ファイルを待つために終了した時間です 良い例は、群れを使用してPHPの問題を見つけることができます-ファイルロック

于 2013-06-10T11:17:34.417 に答える