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

问题描述 投票:1回答:2

根据linux程序员手册,其中说:“ sleep()使调用线程进入睡眠状态,直到经过几秒钟或信号到来,而忽略该信号。”

[我认为线程在其睡眠持续时间到期后将不会立即恢复执行。它可能会提早或晚醒来,尚未确定。对吗?

c linux windows
2个回答
1
投票

根据linux程序员手册,它说:“此外,在睡眠完成后,在CPU可以自由执行再次执行调用线程之前,仍可能会有延迟。”

因此无法确定时间。


0
投票

通常,线程不会提早唤醒(除非如上所述,除非有单独的线程向内核发出信号,表明它应该这样做)。在大多数内核中,睡眠函数的时间参数被解释为许多SysTicks。然后,该任务向内核报告,它认为至少不需要那么多滴答滴答就不需要计算时间-因此它将被排除在进程排队之外,直到SysTick寄存器大于(调用时的值)+(时间参数) )。通常,在不会陷入困境的抢占式内核中,睡眠呼叫将持续所需的时间+ 1 SysTick +1-SysTick(因此,从准时到延迟的任何时间)。至少在嵌入式世界中。过渡到x86时,所有的时间都会变得很混乱。

© www.soinside.com 2019 - 2024. All rights reserved.