2009-04-07 8 views
1

複数のスレッドからアクセスできるCFileオブジェクトがあります。別のスレッドがファイルからデータを読み取っている間に、あるスレッドがこのファイルにデータを書き込んでいる可能性があります。私は、この方針の下で安全でないことがあることを知りたいですか?書き込みまたは読み取りプロセスが完了する前にファイルポインタを変更できますか?答えははいです、どのように同時に読むか書くことができるマルチスレッドのunsafetyを避けるためにですか?CFileオブジェクトの書き込みまたは読み取りの処理中にファイルポインタが変更される可能性があります。

ありがとうございました!

答えて

1

CFileオブジェクトはスレッドセーフではありません。複数のスレッドからアクセスする必要がある場合は、独自の同期を実行する必要があります。 http://msdn.microsoft.com/en-us/library/aa270950.aspxから

サイズとパフォーマンス上の理由から複数のスレッド

からオブジェクトへのアクセス

、MFC オブジェクトは、クラスレベルでのみ、 オブジェクトレベルでスレッドセーフではありません。 これは、2つの異なるCStringオブジェクトを操作する2つの 別々のスレッドを持つことができますが、2つの同じCString オブジェクトを操作する2つのスレッドを持つことはできません。同じ オブジェクトを操作する複数のスレッド が絶対に必要な場合は、 適切なWin32同期 メカニズム(クリティカルセクションなど)でそのようなアクセスを保護します。 重要な セクションおよびその他の関連オブジェクトの詳細については、を参照してください。

クラスライブラリは、このような デバッグメモリアロケーションで使用されるものなどのグローバル データ構造を保護するために内部的に重要な セクションを使用しています。

関連する問題