1

假设在 STA 线程上创建了一个 COM 对象。所以对这个对象的所有调用都在这个线程中序列化。因此,如果对象的某个方法被阻塞,则所有使用该对象的线程都会被阻塞。

那么在 STA COM 对象中使用阻塞方法是要避免的设计缺陷吗?

如果 COM 对象是自由线程的,那么有阻塞方法可以吗?

谢谢

4

1 回答 1

0

是的,单线程单元上的对象通过消息进行同步,并且对它们的所有调用都以这样的方式序列化,即在任何时候都不能在任何此类对象上调用一个以上的方法(也不能多次调用任何方法随时)。这是设计使然,是为了实现一定程度的线程安全。除非您引入死锁,否则拥有一个长时间运行的方法本身并不是什么大问题。是的,呼叫者将等到他们的呼叫依次运行。

多线程单元中的对象不通过消息同步 - 对此类对象的所有调用都是直接完成的,无需同步,因此可以在任何时间并行调用任何对象上的一个或多个方法,这取决于对象确保线程安全。方法当然可以在里面阻塞,但要注意不要引入死锁。

于 2011-06-07T05:12:31.223 回答