COM在多核心机器上的多线程体系结构

问题描述:

COM如何确保在多核机器上保持同步,如果您有COM对外处理服务器和COM客户端彼此依赖,如果你在多核架构上运行它,事情不会受到影响?COM在多核心机器上的多线程体系结构

+0

您会有什么特别的问题? – sharptooth 2010-06-28 13:23:38

+0

如果CPU A运行COM客户端的线程A,并且CPU B运行COM服务器的线程A,现在如果它们互相依赖,并且COM服务器更新了客户端正在处理的某些内容的值,则客户端将使用错误的数据。 – 2010-06-28 13:30:22

在你的评论中,你会问如果COM客户端运行在一个线程和COM服务器上 - 在另一个线程上会发生什么。这两个线程驻留在不同的进程中(因为服务器是out-proc)。

如果您的客户端使用了一个out-proc COM服务器COM子系统使用RPC(本地RPC)与服务器进行通信。这对客户端来说是透明的 - 客户端调用方法,RPC准备一个包含所有参数的字符串,阻塞客户端线程,将调用传递给服务器,服务器处理调用abd返回给客户端。没有并发访问,所以没有额外的同步问题 - 所有的同步都是自动完成的。

由于您的COM服务器不在proc中,因此客户端和服务器的线程在不同的进程中运行。 Windows中的进程间同步机制适用于核心或处理器,因此COM子系统已经为您处理任何多核/处理器问题。

如果您的服务器端数据可能在客户端不知情的情况下发生变化,那么这对于单CPU /内核也是一个问题 - 您需要使用轮询(错误)或客户端通知接口来解决此问题(更好)。