我正在用C语言制作win32程序。
如果有多个线程正在运行,并且其中一个线程正在等待事件(例如,使用WaitForSingleObject()
),该线程是否仍然获得其完整的CPU时间片?
换句话说,操作系统是否知道线程在其中一个事件发出信号之前不需要其时间片?
答案 0 :(得分:8)
是的 - 线程被阻塞,直到它等待的任何信号被发出信号。该线程在被阻塞时不会被安排运行,因此其他线程可以获得所有CPU时间。
请注意,时间片不会进入太多。线程可以在时间片的中间放弃执行,并且(例如)如果等待的内容快速发出信号,它可能会在其原始时间片到期之前再次开始执行。当发出信号时,正在等待它的线程可以立即唤醒 ,不一定等待时间片的结束(例如,如果正在等待的线程具有比线程更高的优先级。运行)。
答案 1 :(得分:2)
如果您正在等待的对象尚未发出信号,则该线程将产生剩余的时间片并进入睡眠状态,直到该信号被发出信号。