4

我正在使用来自 C# (StgCreateDocfile) 的 IStorage 的复合文件实现。

如果我自己同步读取和写入,从多个线程访问一个 IStorage / IStream 实例是否安全?或者这里是否有任何可能有问题的 COM 问题?

例如,我可以安全地调用 EnumElements 来获取存储中的所有流,同时(并且来自不同的线程)创建和写入一个新流吗?

我已经为我的实现编写了一个压力测试,它没有显示任何问题,但我需要 100% 确定。我在 MSDN 文档中没有找到此信息。

4

1 回答 1

1

凝灰一。ILockBytes 接口的文档中有一段关于它的片段。它说 IStorage 和 IStream 的默认实现实现了 IMarshal。如果您遵循 COM 线程规则,这将使它们成为线程安全的。当接口指针在进程内时,很容易忘记这一点。您必须使用 CoMarshalInterThreadInterfaceInStream() 或 IGlobalInterfaceTable 之类的东西。通过锁定自己,您将侥幸逃脱编组。

于 2008-11-08T21:08:19.367 回答