0

Windows で、マルチスレッド C コードで排他的な方法 (ソフトウェアの読み取りと書き込み) でファイルをロックする簡単な方法はありますか? LockFileEx を試しましたが、プロセス間でのみ機能し、(同じプロセスの) スレッドでは機能しません。

注: 私の問題は、小さなファイル サーバー (マルチスレッド) を作成したことです。ファイルの要求が来ると、1 つのスレッド "A" が要求された "file1.txt" に排他的にアクセスする必要がありますが、別のスレッド " B" は、このファイルを使用する前に待機する必要がある同じ "file1.txt" を必要としています。スレッド "A" が "file1.txt" を開く/作成するために dwSharedMode を "0" に指定して CreateFile() を使用し、スレッド "B" が "file1.txt" を開こうとするとエラーが発生します。 。TXT"。スレッド「B」は「file1.txt」をどのように待機できるでしょうか。

4

3 に答える 3

1

私はあなたの質問を次のように理解しています:複数スレッドのリソース(ファイル)へのアクセスを整理する方法(リーダー - ライターの問題を解決する必要があります)

同じプロセス内で動作するスレッド間でリソースを共有する必要がある場合:
同期プリミティブを使用しますcritical_section(システム オブジェクトの同期プリミティブよりも効率的ですが、同じプロセス内のスレッドに対してのみ機能します
)mutex

于 2013-03-25T03:21:36.870 に答える
1

関数内に設定dwShareModeすることで、排他モードでファイルを開くことができます。0CreateFile()

詳細はこちら: http://msdn.microsoft.com/en-us/library/windows/desktop/aa363874(v=vs.85).aspx

于 2013-03-25T02:57:29.850 に答える
0

スリム リーダー/ライター (SRW) ロック

SRW ロックは、スレッドが共有リソースにアクセスできる 2 つのモードを提供します。

  • 共有モード。複数のリーダー スレッドに共有読み取り専用アクセスを許可し、共有リソースから同時にデータを読み取ることができるようにします。読み取り操作が書き込み操作を超える場合、この同時実行により、クリティカル セクションと比較してパフォーマンスとスループットが向上します。

  • 排他モード。一度に 1 つの書き込みスレッドに読み取り/書き込みアクセスを許可します。ロックが排他モードで取得されると、ライターがロックを解放するまで、他のスレッドは共有リソースにアクセスできません。

于 2013-03-25T03:01:19.830 に答える