STA COM对象的阻塞方法是设计缺陷吗?

时间:2011-06-07 04:09:13

标签: com blocking sta

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

因此在STA COM对象中使用阻塞方法是一个需要避免的设计缺陷吗?

如果COM对象是免费线程,可以使用阻塞方法吗?

由于

1 个答案:

答案 0 :(得分:0)

是的,单线程公寓上的对象通过消息进行同步,并且对它们的所有调用都是以这样的方式序列化的,即在任何时刻都不能在任何这样的对象上调用多个方法(也不能调用任何方法)在任何时刻不止一次)。这是设计用于实现一定程度的线程安全性。除非引入死锁,否则拥有一个长时间运行的方法本身并不是一个大问题。是的,呼叫者将等待他们的呼叫轮流运行。

多线程单元中的对象不通过消息同步 - 所有对这些对象的调用都是在没有同步的情况下直接完成的,因此可以在任何时刻并行地在任何对象上调用多个或多个方法,这取决于确保线程安全的对象。方法当然可以阻止内部,但应注意不要引入死锁。