5

我正在用 C 语言制作一个 win32 程序。

当您有多个线程正在运行,并且其中一个线程正在等待一个事件(WaitForSingleObject()例如使用)时,该线程是否仍然获得其完整的 CPU 时间片?

换句话说,操作系统是否知道线程不需要它的时间片,直到其中一个事件发出信号?

4

2 回答 2

9

是的 - 线程被阻塞,直到它正在等待的任何东西都发出信号。线程在被阻塞时不会被调度运行,因此其他线程会获得所有的 CPU 时间。

请注意,时间片并没有过多地参与其中。一个线程可以在时间片的中间放弃执行,并且(例如)如果它正在等待的内容被快速发出信号,它可能会在其原始时间片到期之前再次开始执行。当某事发出信号时,正在等待它的线程可以立即唤醒,而不必等待时间片的结束(例如,如果正在等待的线程比正在运行的线程具有更高的优先级)。

于 2010-11-13T01:02:58.223 回答
2

如果您正在等待的对象尚未发出信号,则线程将产生其剩余的时间片并进入睡眠状态,直到该对象发出信号为止。

于 2010-11-13T00:52:56.427 回答