multithreading - 微软的公寓类比 (STA, MTA) : Need help understanding it

标签 multithreading com sta mta

我已经阅读了很多有关 Microsoft 的线程单元模型的信息,但我仍然无法将其可视化。

Microsoft 使用住在公寓中的生物类比。因此,对于 STA,请考虑以下内容(我知道这有点傻)。

  1. 假设线程 = 人,COMObject = 细菌。人住在公寓里,细菌就住在人体内。所以在 STA-Land 中,一个线程存在于 STA 中,而 COMObject 存在于线程内部,因此为了与 COMObject 交互,必须通过在 COMObject 的线程上运行代码来实现。

  2. 假设 thread = person 和 COMObject = cat。人住在公寓里,猫和人住在公寓里。 SO 在 STA-Land 中,线程和 COMObject 在同一层级。

Q1。上面哪个类比是正确的,或者如果都不正确,您会如何描述 STA?

Q2。您如何描述 MTA?

最佳答案

我不喜欢这些类比。它们令人困惑。

您创建了一个公寓。

如果它是一个 STA,则公寓中只有一个线程,因此该公寓中的所有对象都将在该单个线程上执行(因此该公寓中的对象没有并发执行)

如果它是 MTA,则该单元中可以有多个线程。因此,如果需要,MTA 中的对象需要显式实现同步。

一个物体住在一个公寓里。同一个公寓中可以有多个对象。

A very good read here

关于multithreading - 微软的公寓类比 (STA, MTA) : Need help understanding it,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9014769/

相关文章:

c# - 如何创建 PSafeArray 类型的参数?

com - 使用 Powershell 将 Excel 工作表从一个工作簿复制到另一个工作簿

c# - 为什么忽略 STAThread 属性?

c++ - 无法使用在同一类中使用成员函数的线程进行编译

python - 我的线程正确吗?如果是,那么为什么代码不起作用?

c++ - FindConnectionPoint 返回 E_NOINTERFACE

c - 如何确定当前进程中 COM 使用的内部 HWND?

c++ - 如何中断其他 std::threads C++

C# 使用子线程回调防止调用挂起

c# - 在 C# 的控制台程序中使用 [STAThread]