2

我想测量睡眠的不准确程度。我的意思是,如果我在我的程序中写 usleep(5000) 睡眠的最长时间是多少?

提前致谢

4

2 回答 2

4

除非你有一个 RTOS 内核,否则最长的时间是永远的。

usleep(或nanosleep任何睡眠)保证至少等待您告诉它的时间,四舍五入到系统计时器粒度,除非信号被捕获。您可以从返回值中知道是否发生了信号。

在那之后,您的线程将准备好运行,并且最终将由调度程序自行决定再次运行。根据您不知道的一千个因素,这可能是下一纳秒或 5 分钟,或者永远不会。

于 2012-01-23T11:07:10.187 回答
3

usleep在现代 Linux 系统上使用nanosleep系统调用,因此它不会受到旧实现的信号相关问题的影响。另一方面,它仍然受到系统计时器分辨率的影响,这是内核和硬件特定的。

也就是说,从usleep手册页:

POSIX.1-2001 声明此函数已过时;请改用 nanosleep(2)。POSIX.1-2008 删除了 usleep() 的规范。

于 2012-01-23T11:19:00.640 回答