2008-11-08 35 views
4

我从C#(StgCreateDocfile)使用IStorage的复合文件实现。IStorage的复合文件实现是线程安全的吗?

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

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

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

回答

1

凝灰岩之一。在ILockBytes接口的文档中有一个关于它的片段。它说IStorage和IStream的默认实现实现了IMarshal。如果你遵循COM线程规则,这将使它们线程安全。当接口指针处于进程中时,很容易忘记。你必须使用类似CoMarshalInterThreadInterfaceInStream()或IGlobalInterfaceTable。通过锁定自己,你不会因为编组而束手束脚。