1

fopen/fwrite とマルチスレッド?

一部のマルチスレッド プログラムは同じファイルを開き、各スレッドはそのファイルへのファイル ポインターを作成します。

ランダムな時間にファイルを更新する特定のプログラムによって作成されたスレッドが 1 つありますが、別のプログラムによって作成された他のスレッドは、ファイルの内容を単に読み取るだけです。

書き込みスレッドがファイルの内容を変更し、他のスレッドが内容を読み取ろうとすると、競合/データの不一致の問題が発生すると思います。

ここでの問題は、ファイルを更新するスレッドを、ファイルの内容を読み取るスレッドを作成するプログラムとは別の exe プログラムにコンパイルする必要があるため、プログラム内レベルのスレッド制御が不可能になることです。

私の解決策は、ハードディスクに非常に小さな「フラグ」ファイルを作成して、ファイルの3つのステータスを示すことです。

1) 書き込みスレッドがファイルの内容を更新しています。

2) 読み取りスレッドがファイルの内容を読み取っています。

3) 1)または 2)のいずれでもない。

このフラグ ファイルを使用して、必要に応じてスレッドをブロックします。

この問題に対するよりコンパクトできちんとした解決策はありますか?

4

1 に答える 1

0

すべてのプロセスが認識しているプロセスグローバルな「名前付き」セマフォを使用する方が簡単な場合があります。さらに、file-open-closeとファイルの内容をスピンループする代わりに、スレッド/プロセスブロッキングセマフォメカニズムを使用できます...

于 2012-12-07T14:17:09.480 に答える