C语言 线程在调用 sleep() 或 Sleep() 后何时恢复运行?



根据Linux程序员手册,其中说: "sleep(( 使调用线程休眠,直到几秒钟过去或信号到达,而不会被忽略。">

我认为线程不会在其睡眠持续时间到期后立即恢复执行。它可能会早起或晚醒来,它没有确定。右?

通常,线程不会提前唤醒(除非如前所述,有来自单独线程的信号向内核发出信号,表明它应该这样做(。 在大多数内核中,睡眠函数的时间参数被解释为许多 SysTick。然后,该任务向内核报告,它认为至少在那么多的时钟周期中不需要计算时间 - 因此它被排除在进程队列之外,直到 SysTick 寄存器大于(调用时的值(+(时间参数(。 通常,在不陷入困境的抢占式内核中,睡眠调用将持续所需的时间 + 1 个 SysTick +- 1 个 SysTick(因此从准时到晚一点(。 也就是说,至少在嵌入式世界中是这样。当您过渡到 x86 时,所有的时间都会变得模糊。

根据 linux 程序员手册,其中说"此外,在睡眠完成后,CPU 可能仍然有延迟,以便再次自由执行调用线程。

所以时间没有确定。

最新更新