一个作为参数的睡眠呼叫的预期持续时间是多少?是不是超过1秒的随机时间?这是一些至少一秒的随机时间吗?
情景:
开发人员A编写的代码与输出设备按顺序执行某些步骤。代码已发货,A离开。
从现场建议开发者B,步骤j和k之间需要一秒钟的间隔。所以他在这些步骤之间插入了对sleep(1)
的调用。代码已发货,开发人员B离开。
开发人员C想知道sleep(1)
是否应该睡得足够长,或者是否应该使用更高分辨率的方法来确保至少发生1000毫秒的延迟。
答案 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便携式方式,我知道。