假设我们正在编写一个调用 sleep() 函数的 C 程序。例如,通过调用 sleep(7),调用线程将休眠 7 秒。
我的问题是:考虑到每个进程在 CPU 上都有自己的量子时间(因为有许多进程连续运行),线程是否会在我们的时间/时钟 7 秒后唤醒,或者可能需要更长时间?
答案1
的定义sleep(3)
允许调用返回前,在, 或者后指定时间:
描述
sleep()
使调用线程休眠,直到几秒过去或一个不被忽略的信号到达。
所以我们有这些可能的情况
- 呼叫因未捕获的信号而中断。
sleep()
立即并在指定时间之前返回 - 呼叫圆满完成,但系统太忙,一段时间内无法安排您的任务
- 调用圆满完成并被放回运行队列并立即执行
答案2
POSIX 保证您成功、不间断的睡眠至少会按照您的要求睡眠:
http://pubs.opengroup.org/onlinepubs/009604599/functions/sleep.html
在 Linux 上,由于 1) 舍入 2) 等待调度程序将进程/线程置于 CPU 上,可能需要更长的时间 3) 处于停止状态的时间: http://man7.org/linux/man-pages/man2/nanosleep.2.html