sleep系统调用及其时间参数

sleep系统调用及其时间参数

假设我们正在编写一个调用 sleep() 函数的 C 程序。例如,通过调用 sleep(7),调用线程将休眠 7 秒。

我的问题是:考虑到每个进程在 CPU 上都有自己的量子时间(因为有许多进程连续运行),线程是否会在我们的时间/时钟 7 秒后唤醒,或者可能需要更长时间?

答案1

的定义sleep(3)允许调用返回,, 或者指定时间:

描述 sleep() 使调用线程休眠,直到几秒过去或一个不被忽略的信号到达。

所以我们有这些可能的情况

  1. 呼叫因未捕获的信号而中断。sleep()立即并在指定时间之前返回
  2. 呼叫圆满完成,但系统太忙,一段时间内无法安排您的任务
  3. 调用圆满完成并被放回运行队列并立即执行

答案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

相关内容