【问题标题】:Internal Thread vs External Thread in c#c#中的内螺纹与外螺纹
【发布时间】:2019-08-12 15:54:56
【问题描述】:

我读到了Artcle,关于 c# 中的线程安全技术,它说

Lock 或 Monitor 是一回事,它适用于应用程序生成的内部线程。锁或监视器无法控制外部线程。

我不明白Internal threadExternal therad 是什么?这是什么意思?

【问题讨论】:

  • 它们没有任何明确的含义。但我认为这篇文章想说的是:lock / Monitor 不是魔法——它们只能影响选择使用它们的线程,以及唯一正在运行的线程选择使用它们是应用程序中的线程。
  • 从我可以从文章中得出的结论 - 内部和外部线程对于属于给定进程和不属于给定进程的线程并不是很好的定义。这种混淆也是由于文章中的“应用程序”术语似乎表示一个过程。

标签: c# multithreading thread-safety


【解决方案1】:

来自您的引述“应用程序生成的内部线程” 来自文章后面的“外部线程基本上来自应用程序外部”

在这种情况下,内部线程是由应用程序本身创建的 - 因此可以使用 Lock & Monitor 来同步单个应用程序中不同线程对资源的访问。

外部线程由其他应用程序创建 - 因此 Mutex 和 Semaphore 可用于允许不同应用程序同步访问资源。

【讨论】:

  • 感谢您的回答,有一种情况是我们有内螺纹和外螺纹?如果是,我们应该使用(Mutex 或 Lock/monitor)中的哪一个?
  • 我不确定您所说的 “有一种情况是我们同时拥有内螺纹和外螺纹”。所有 .net 应用程序都将具有“内部”线程——如果您有多个应用程序一起运行——那么每个应用程序的“内部”线程对于其他应用程序来说都是“外部的”。如果您要锁定只能在应用程序中访问的东西 - 那么锁定/监视器是合适的。如果您尝试锁定您正在编写的多个应用程序的共同点 - 那么 Mutex/Semaphore 将是合适的。
  • 如果我将信号量仅用于内部读取。是不是出了点问题?
  • 如果您愿意,可以将 Mutex/Semaphore 用于内部线程 - 不会出错。但是,您可能会发现,如果您执行许多锁定操作,它们会比 Lock?Monitor 稍慢一些,因此您会受到轻微的性能影响。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-28
  • 2011-04-01
  • 2011-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多