windows – COM`IStream`接口指针和来自不同线程的访问
对于任何IStream实现的官方COM要求是什么,它应该是线程安全的,就通过跨线程的相同接口指针并发访问IStream方法而言?
我不是在讨论数据完整性(通常,读/写/搜索应该与锁同步).问题是需要使用COM marshaller将IStream对象传递给来自不同COM公寓的线程. 这是一个比我提到的关于 编辑,我在MSDN找到了这个信息:
现在我相信,CreateStreamOnHGlobal返回的IStream对象是线程安全的,但是没有要求其他IStream实现应该遵循这一点. 解决方法
不,不是.对另一个问题的公认答案是错误的. Hans Passant的回答是正确的.你应该删除这个问题,因为它预先假定了一个错误,即CreateStreamOnHGlobal返回一个线程安全的IStream.它没有.然后,您会问其他IStream实现是否属实.事实并非如此.
一般而言,在计算机编程中,特别是COM,对象有保证他们给予并保证他们不给予.如果您使用符合其保证的对象,那么它将一直有效(除了错误).如果您超出保证范围,它可能仍会在大部分时间内工作,但不再保证. 通常在COM中,线程安全保证由一个标准线程模型给出. 见:http://msdn.microsoft.com/en-us/library/ms809971.aspx >单元线程对象可以在多个线程上实例化,但只能从它们实例化的特定线程中使用. 注意:线程模型属于对象而不是接口.支持IStream的一些对象可以是单线程的,其他对象可以是完全线程安全的.这取决于实现接口的代码.因为接口只是一个规范,而线程安全不是它所涵盖的东西. 编组接口总是无害的.如果线程的线程模型与对象的主线程兼容,您将获得完全相同的接口指针.如果它们不兼容,您将获得代理.但它对编组从来没有伤害,除非你知道对象是兼容的,否则你应该总是编组. 但是,实施者始终可以提供额外的保证. 在CoMarshalInterthreadInterfaceInStream的情况下,在文档中告诉您,使用CoUnmarshalInterfaceAndReleaseStream可以将返回的IStream接口用于在目标线程上进行解组. 也就是说,您已获得额外保证.所以你可以依靠这种工作. 但这并不适用于任何其他任何IStream实例. 所以你应该总是把它们封为一体. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Geo Redundant Storage如何在Microsoft Azure上收费?
- Windows系统下WEB服务器权限的设置详解(四)
- 如何在Windows NT 4中运行VBScript?
- window下解决fastdfs_client安装报错问题
- 删除批处理脚本,窗口中的文件夹内容,无需提示
- windows – 需要运行.exe,然后在~10秒后终止它并转到批处理
- windows – 如何远程重启挂起的服务器
- windows – 为什么tracert延迟不会增加ping延迟?
- Windows API类似于pthread_cancel?
- 有人可以确认Microsoft Excel 2007内部如何表示数字吗?