预期的睡眠时间(1)
问题描述:
以一个为参数的睡眠呼叫的预期持续时间是多少?这是否是一段不超过1秒的随机时间?至少有一秒的随机时间?预期的睡眠时间(1)
场景:
显影剂A写到按顺序执行一些步骤与输出设备的代码。该代码已发货,A离开。
开发者B从现场被告知步骤j和k需要它们之间的一秒间隔。所以他在这些步骤之间插入一个
sleep(1)
的电话。该代码已发货且开发者B离开。开发者C想知道
sleep(1)
是否应该预计足够长的睡眠时间,或者是否应该使用更高分辨率的方法来确保至少1000毫秒的延迟发生。
答
sleep()
只保证这一进程将睡眠至少指定的时间量,所以你把它“一些随机的时间至少是一秒钟。”
类似的行为在man page为nanosleep
提到:
了nanosleep()暂停调用线程的执行,直到至少在* REQ指定经过的时间...
你也可以在this question找到有用的答案。
答
我的男人页这样说:
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和(听起来很有趣,但是是真的)选择是唯一posix便携式睡觉亚秒(或更高精度)的方式,我知道。
因此,如果返回值为零,这意味着假设没有“睡眠时间”秒。但是,如果一个信号终止了睡眠,并且线程已经睡着了949毫秒,睡眠会返回1还是0? – 2012-03-08 21:21:39
尽管差异与此问题无关,但“使调用线程睡眠”(文档)和“使进程处于睡眠状态”(您的解释)不是同一回事。 – hvd 2012-03-08 21:39:39
@ hvd,你是对的,我更新了我的措辞。谢谢。 – 2012-03-08 21:41:25