预期睡眠时间(1)

时间:2012-03-08 18:50:03

标签: linux sleep

一个作为参数的睡眠呼叫的预期持续时间是多少?是不是超过1秒的随机时间?这是一些至少一秒的随机时间吗?

情景:

  • 开发人员A编写的代码与输出设备按顺序执行某些步骤。代码已发货,A离开。

  • 从现场建议开发者B,步骤j和k之间需要一秒钟的间隔。所以他在这些步骤之间插入了对sleep(1)的调用。代码已发货,开发人员B离开。

  • 开发人员C想知道sleep(1)是否应该睡得足够长,或者是否应该使用更高分辨率的方法来确保至少发生1000毫秒的延迟。

2 个答案:

答案 0 :(得分:2)

sleep()仅保证进程至少会在指定的时间内休眠,因此您将其设置为“一些至少一秒的随机时间。”

nanosleep {{1}}中提到了类似的行为:

  

nanosleep()暂停执行调用线程,直到至少* req中指定的时间已经过去...

您可能还会在man page中找到有用的答案。

答案 1 :(得分:2)

我的man-page说:

unsigned int sleep(unsigned int seconds);

DESCRIPTION
   sleep()  makes  the  calling  thread  sleep  until seconds seconds have
   elapsed or a signal arrives which is not ignored.
...
RETURN VALUE
   Zero if the requested time has elapsed, or the number of  seconds  left
   to sleep, if the call was interrupted by a signal handler.

所以睡眠让线程睡眠,只要你告诉它,但信号唤醒它。我看不到进一步的保证。

如果您需要更好,更精确的等待时间,那么睡眠不够好。有 nanosleep 和(听起来很有趣,但确实如此) select 是唯一一种可以睡眠亚秒(或更高精度)的posix便携式方式,我知道。