2008-11-08 67 views
4

我從C#(StgCreateDocfile)使用IStorage的複合文件實現。IStorage的複合文件實現是線程安全的嗎?

從多個線程訪問一個IStorage/IStream實例是否安全,前提是我同步讀寫自己?或者是否有任何COM問題可能在這裏有問題?

例如,我可以安全地調用EnumElements來獲取存儲中的所有流,同時(並從不同的線程)創建和寫入新的流?

我已經爲我的實施寫了一個壓力測試,並且它沒有顯示任何問題,但我需要100%確定。我沒有在MSDN文檔中找到這些信息。

回答

1

凝灰岩之一。在ILockBytes接口的文檔中有一個關於它的片段。它說IStorage和IStream的默認實現實現了IMarshal。如果你遵循COM線程規則,這將使它們線程安全。當接口指針處於進程中時,很容易忘記。你必須使用類似CoMarshalInterThreadInterfaceInStream()或IGlobalInterfaceTable。通過鎖定自己,你不會因爲編組而束手束腳。