代码之家  ›  专栏  ›  技术社区  ›  Stefan Schultze

IStorage的复合文件实现是线程安全的吗?

  •  4
  • Stefan Schultze  · 技术社区  · 17 年前

    我使用的是C#(StgCreateDocfile)中IStorage的复合文件实现。

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

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

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

    1 回复  |  直到 16 年前
        1
  •  1
  •   Hans Passant    17 年前

    凝灰岩一号。ILockBytes接口的文档中有一个关于它的片段。它说IStorage和IStream的默认实现实现了IMarshal。这将使它们线程安全,前提是您遵循COM线程规则。当接口指针在proc中时,这很容易忘记。您必须使用CoMarshalInterThreadInterfaceInStream()或IGlobalInterfaceTable之类的工具。你可以通过把自己锁起来而不进行编组。

    推荐文章