COM`IStream`接口指针和来自不同线程的访问

祖父

任何 IStream实现来说,对COM的正式要求是,它应该是线程安全的,就可以IStream跨线程通过同一接口指针并发地访问方法而言

我不是在谈论数据完整性(通常,无论如何,读/写/搜索都应该与锁同步)。问题是需要使用COM编组器将IStream对象从其他COM单元传递到线程。

这比我问一个更普遍的问题,IStream通过返回的CreateStreamOnHGlobal,请参阅有更多的技术细节。我只是想更好地理解这些东西。

编辑,我已经在MSDN上找到此信息

线程安全。从Windows 8开始,由SHCreateMemStream创建的流是线程安全的。在较早的系统上,该流不是线程安全的。CreateStreamOnHGlobal创建的流是线程安全的。

现在我相信,由IStream返回对象CreateStreamOnHGlobal是线程安全的,但是没有要求其他IStream实现遵循此要求

Ben

不,不是。对另一个问题的公认答案是完全错误的。汉斯·帕桑特的答案是正确的。您应该删除此问题,因为它有一个错误的假设,即CreateStreamOnHGlobal返回线程安全的IStream。没有。然后,您问其他IStream实现是否如此。不是。

通常,在计算机编程中,尤其是在COM中,对象具有保证对象给予和不给予对象的保证。如果您使用符合其保证的对象,那么它将一直有效(除非存在错误)。如果您超出了保证范围,它可能在大多数时间仍然有效,但是不再保证。

通常,在COM中,线程安全保证由标准线程模型之一提供。

看到这里:http : //msdn.microsoft.com/en-us/library/ms809971.aspx

  • 公寓线程对象可以在多个线程上实例化,但只能在实例化它们的特定线程中使用。
  • 可以在多线程单元中实例化多线程单元对象,并且可以从任何这些线程中使用它们。
  • “两个”线程对象都可以在任何线程中实例化,并可以在任何线程中使用。

注意:线程模型属于对象而不是interface一些支持的对象IStream可能是单线程的,其他的则可能是全线程安全的。这取决于实现接口的代码。因为接口只是一个规范,所以线程安全性不受它覆盖。

封送接口始终是无害的。如果线程的线程模型与对象的主线程兼容,则将获得完全相同的接口指针。如果它们不兼容,您将获得代理。但是,封送从来没有伤害,除非您知道对象是兼容的,否则应始终封送。

但是,实施者始终可以给予其他保证。

对于CoMarshalInterthreadInterfaceInStream,在文档中会告诉您IStream可以使用返回的接口将其用于在目标线程处进行编组CoUnmarshalInterfaceAndReleaseStream

也就是说,您得到了额外的保证因此,您可以依靠该工作。

但这IStream在任何时候都不适用于任何其他实例

因此,您应该始终将其编组。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

COM`IStream`接口指针和来自不同线程的访问

来自分类Dev

Android 访问来自不同线程的活动的相同实例方法,无需锁定。添加同步方法

来自分类Dev

不同线程中SharedPreference的访问值

来自分类Dev

C#从线程访问不同线程的变量

来自分类Dev

访问不同线程中的不同列表元素

来自分类Dev

使用来自不同线程的相同开放SQL连接

来自分类Dev

使用来自不同线程的 opengl-command

来自分类Dev

我可以从不同的线程访问COM对象的接口吗?

来自分类Dev

Qt 4.8:两个信号和来自不同线程的一个插槽之间的连接行为

来自分类Dev

从不同线程访问只读对象的想法

来自分类Dev

如何运行不同线程的方法访问变量?

来自分类Dev

Eclipse ProgressMonitor在不同线程中访问UI

来自分类Dev

从不同线程调用的XInputGetState和XInputSetState

来自分类Dev

Rx在不同线程上产生和消耗

来自分类Dev

RabbitMQ中不同线程中的basicGet和basicAck

来自分类Dev

来自不同线程的ui线程上的c ++ / cli wpf set属性

来自分类Dev

在来自不同类实例的不同线程中使用“ pcl :: visualization”

来自分类Dev

填充来自View中不同线程中运行的不同API的结果

来自分类Dev

不同线程的输出分开

来自分类Dev

不同线程的输出分开

来自分类Dev

该应用程序调用了已编组为不同线程的接口-Windows Store App

来自分类Dev

取消引用不同线程中的原子对象的只读非原子指针是否安全?

来自分类Dev

来自消息泵的不同线程上的DirectX立即上下文

来自分类Dev

来自不同线程的顺序文件IO失败,并出现FileSystemException

来自分类Dev

如何安全销毁两个不同线程经常访问的对象?

来自分类Dev

从不同线程访问的领域数据库对象问题(仅在某些设备上)

来自分类Dev

WPF和NotifyPropertyChanged来自不同的线程

来自分类Dev

从JavaFX中的不同线程更新UI

来自分类Dev

在不同线程中发出Volley请求

Related 相关文章

  1. 1

    COM`IStream`接口指针和来自不同线程的访问

  2. 2

    Android 访问来自不同线程的活动的相同实例方法,无需锁定。添加同步方法

  3. 3

    不同线程中SharedPreference的访问值

  4. 4

    C#从线程访问不同线程的变量

  5. 5

    访问不同线程中的不同列表元素

  6. 6

    使用来自不同线程的相同开放SQL连接

  7. 7

    使用来自不同线程的 opengl-command

  8. 8

    我可以从不同的线程访问COM对象的接口吗?

  9. 9

    Qt 4.8:两个信号和来自不同线程的一个插槽之间的连接行为

  10. 10

    从不同线程访问只读对象的想法

  11. 11

    如何运行不同线程的方法访问变量?

  12. 12

    Eclipse ProgressMonitor在不同线程中访问UI

  13. 13

    从不同线程调用的XInputGetState和XInputSetState

  14. 14

    Rx在不同线程上产生和消耗

  15. 15

    RabbitMQ中不同线程中的basicGet和basicAck

  16. 16

    来自不同线程的ui线程上的c ++ / cli wpf set属性

  17. 17

    在来自不同类实例的不同线程中使用“ pcl :: visualization”

  18. 18

    填充来自View中不同线程中运行的不同API的结果

  19. 19

    不同线程的输出分开

  20. 20

    不同线程的输出分开

  21. 21

    该应用程序调用了已编组为不同线程的接口-Windows Store App

  22. 22

    取消引用不同线程中的原子对象的只读非原子指针是否安全?

  23. 23

    来自消息泵的不同线程上的DirectX立即上下文

  24. 24

    来自不同线程的顺序文件IO失败,并出现FileSystemException

  25. 25

    如何安全销毁两个不同线程经常访问的对象?

  26. 26

    从不同线程访问的领域数据库对象问题(仅在某些设备上)

  27. 27

    WPF和NotifyPropertyChanged来自不同的线程

  28. 28

    从JavaFX中的不同线程更新UI

  29. 29

    在不同线程中发出Volley请求

热门标签

归档