在<<操作系统精髓与设计原理>>第四章第4.1.2小节中说:一般来说,挂起态对线程没有什么意义,这是由于此类状态是一个进程级的概念。典型的线程有派生态、阻塞态、接触阻塞、结束态。
先来看看进程的挂起态。
挂起态进程的概念与不在主存中的进程概念是等价的。一个不在主存中的进程,不论它是否在等待一个事件,都不能立即执行。
我们可以总结一下挂起态进程的概念。首先,定义挂起态进程具有的特点如下所示:
1.进程不能立即执行。
2.进程可能是或不是正在等待一个事件。如果是,阻塞条件不依赖于挂起条件,阻塞事件的发生不会使进程立即被执行。
3.为阻止进程执行,可以通过代理把这个进程置于挂起态,代理可以是进程自己,也可以是父进程或操作系统。
4.除非代理显示地命令系统进行状态转换,否则进程无法从这个状态中转移。
进程挂起的原因有交换、其他OS原因、交互式用户请求、定时(轮转)、父进程请求。
线程挂起SuspendThread在MSDN中这样解释:
If the function succeeds, execution of the specified thread is suspended and the thread's suspend count is incremented.
Suspending a thread causes the thread to stop executing user-mode (application) code.
大意是仅仅停止用户态代码的执行,并没有换出主存的概念,因为那是进程的事情。
SuspendThread()翻译为挂起线程真的不怎么合适,应该翻译为停止\暂停线程来得更确切。