2008-11-08 6 views
4

Я использую сложную реализацию файла IStorage из C# (StgCreateDocfile).Реализован ли составной файл IStorage в поточном режиме?

Безопасно ли получить доступ к экземпляру IStorage/IStream из нескольких потоков, если я синхронизировал чтение и запись себя? Или есть проблемы с COM, которые могут быть проблематичными здесь?

Например, можно ли безопасно вызвать EnumElements для получения всех потоков в хранилище, в то же время (и из другого потока) создания и записи нового потока?

Я уже написал стресс-тест для своей реализации, и у него не было никаких проблем, но мне нужно быть на 100% уверенным. Я не нашел эту информацию в документах MSDN.

ответ

1

Tuff one. В документации для интерфейса ILockBytes есть фрагмент. В нем говорится, что стандартные реализации IStorage и IStream реализуют IMarshal. Это сделает их потокобезопасными, если вы будете следовать правилам потоковой передачи COM. Это легко забыть, когда указатели интерфейса находятся в proc. Вы должны использовать что-то вроде CoMarshalInterThreadInterfaceInStream() или IGlobalInterfaceTable. Вы сойдете с ума, не блокируя себя.