複数のスレッドからアクセスできる CFile オブジェクトがあります。あるスレッドがこのファイルにデータを書き込んでいる間に、別のスレッドがファイルからデータを読み取っている可能性があります。このポリシーに危険性はありますか? 書き込みまたは読み取りプロセスが完了する前に、ファイル ポインターを変更できますか? 答えはイエスです。同時に読み書きできるマルチスレッドの危険性を回避するにはどうすればよいですか?
どうもありがとうございました!
複数のスレッドからアクセスできる CFile オブジェクトがあります。あるスレッドがこのファイルにデータを書き込んでいる間に、別のスレッドがファイルからデータを読み取っている可能性があります。このポリシーに危険性はありますか? 書き込みまたは読み取りプロセスが完了する前に、ファイル ポインターを変更できますか? 答えはイエスです。同時に読み書きできるマルチスレッドの危険性を回避するにはどうすればよいですか?
どうもありがとうございました!
CFileオブジェクトはスレッドセーフではありません。複数のスレッドからそれらにアクセスする必要がある場合は、独自の同期を実行する必要があります。
http://msdn.microsoft.com/en-us/library/aa270950.aspxから:
複数のスレッドからのオブジェクトへのアクセス
サイズとパフォーマンス上の理由から、MFC オブジェクトはオブジェクト レベルではスレッド セーフではなく、クラス レベルでのみスレッド セーフです。これは、2 つの異なる CString オブジェクトを操作する 2 つの別個のスレッドを持つことはできますが、同じ CString オブジェクトを操作する 2 つのスレッドを持つことはできないことを意味します。同じオブジェクトを操作する複数のスレッドが絶対に必要な場合は、クリティカル セクションなどの適切な Win32 同期メカニズムでそのようなアクセスを保護します。クリティカル セクションおよびその他の関連オブジェクトの詳細については、Win32 SDK の を参照してください。
クラス ライブラリは、クリティカル セクションを内部的に使用して、デバッグ メモリ割り当てで使用されるものなどのグローバル データ構造を保護します。