我正在C做一个win32程序
当你有多个线程正在运行,并且其中一个线程正在等待一个事件(例如使用WaitForSingleObject()
)时,那个线程是否仍然会得到完整的CPU时间片?
换言之,操作系统是否知道该线程不需要其时间片,直到其中一个事件发出信号为止?
是的 – 线程被阻塞,直到等待的信号变成信号。 线程不会计划在阻塞时运行,所以其他线程将获得所有CPU时间。
请注意,虽然时间片并没有进入很多。 一个线程可以在一个时间片的中间放弃执行,并且(例如)如果它正在等待的东西变得很快被发送,它可能会在其原始时间片到期之前再次开始执行。 当有信号发出时,等待它的线程可以立即唤醒,而不必等待时间片结束(例如,如果正在等待的线程比正在运行的线程具有更高的优先级)。
如果您正在等待的对象尚未发出信号,则该线程将产生剩余的时间片并进入休眠状态,直到该对象发出信号。