16

此链接中解释了 .NET 框架中线程的状态。

我最近在一个网站上看到了这张照片,我想到了几个问题:

在此处输入图像描述

  1. 操作系统中的线程生命周期与 .NET 框架中的线程生命周期并不完全一致。有人可以提供与 OS 中的状态与 .NET 框架相匹配的资源吗?

  2. 我们在 .NET 框架中没有称为Blocked的状态。如果发出 I/O 请求,线程的状态是什么?

  3. Aborted状态的目的是什么?当线程调用该Abort()方法时,它会进入AbortRequested状态,线程响应 abort 请求后,它会进入Stopped状态。那么Aborted状态的作用是什么?

4

2 回答 2

6

如果线程的执行已被同步原语之一(例如锁或互斥锁)挂起,则线程将被阻塞。根据定义,在给定时刻执行有用工作的任何线程在那个时刻都不会被阻塞。

AbortRequested/Stopped循环使线程有机会执行有序关闭、释放获取的资源并执行其他清理任务。

http://www.albahari.com/threading/

于 2012-01-23T03:02:17.763 回答
3

回答您的问题:

  1. 我不相信这个映射会像你希望的那样有用。我从来没有遇到过,也从来不需要它。
  2. 除非您尝试编写诸如死锁检测器(相当高级)之类的东西,否则并不真正需要“阻塞”状态。从典型的开发人员的角度来看,操作系统“阻塞”状态是暂时的,可以忽略。(您的代码似乎正在运行,但操作系统在收到异步响应之前无事可做。)
  3. 将 Aborted 状态想象为 .NET 为线程中的所有代码提供异常处理程序。当捕获到异常,导致线程终止时,.NET 会为您将其转换为 Aborted 状态。否则,您可能无法区分异常和正常线程终止之间的区别。
于 2012-01-25T18:11:03.737 回答