4

C# からの ISt​​orage の複合ファイル実装 (StgCreateDocfile) を使用しています。

自分で読み取りと書き込みを同期した場合、複数のスレッドから 1 つの ISt​​orage / IStream インスタンスにアクセスしても安全ですか? または、ここで問題になる可能性のある COM の問題はありますか?

たとえば、EnumElements を安全に呼び出してストレージ内のすべてのストリームを取得し、同時に (別のスレッドから) 新しいストリームを作成して書き込むことはできますか?

私は実装用のストレス テストを既に作成しており、問題はありませんでしたが、100% 確信する必要があります。MSDN ドキュメントでこの情報を見つけられませんでした。

4

1 に答える 1

1

タフワン。ILockBytes インターフェイスのドキュメントに、それに関するスニペットがあります。IStorage と IStream のデフォルトの実装は IMarshal を実装していると書かれています。COM スレッドのルールに従っていれば、スレッドセーフになります。インターフェイス ポインターがインプロセスの場合、忘れがちです。CoMarshalInterThreadInterfaceInStream() や IGlobalInterfaceTable などを使用する必要があります。自分自身をロックすることで、マーシャリングを行わなくても済むようになります。

于 2008-11-08T21:08:19.367 に答える