繁体   English   中英

为什么clock_nanosleep优于nanosleep来在C中创建睡眠时间?

[英]Why is clock_nanosleep preferred over nanosleep to create sleep times in C?

这两个功能中哪一个更好

#include <time.h>
int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *rqtp, struct timespec *rmtp);

要么

#include <time.h>
int nanosleep(const struct timespec *rqtp, struct timespec *rmtp);

clock_nanosleep优于nanosleep的优点是:

  1. 你可以指定一个绝对时间睡觉,直到而非间隔睡觉。 这对于实时( nanosleep时间)时钟有所不同,可以由管理员或ntpd等重置。通过nanosleep并预先计算睡眠间隔达到给定的绝对时间,如果时钟是,则无法唤醒重置并且所需时间“早”到达。 此外,还有一个使用间隔时间进行调度的竞争条件:如果您计算要休眠的间隔,但是在调用nanosleep之前先被抢占并且暂时不再安排,您将再次睡眠时间过长。
  2. 您可以在实时时钟以外的计时器上睡觉。 最有用的通常是单调时钟(不能复位并随着实际时间的推移而单调增加),但也有其他有趣的应用程序,例如在多线程进程中有一个线程睡眠进程的cpu时钟(因此它在进程使用了​​给定量的cpu时间后唤醒)。

在我的系统上, man 2 clock_nanosleep解释了这两个函数之间的差异:

Like  nanosleep(2), clock_nanosleep() allows the caller to sleep for an
   interval specified with nanosecond precision.  It differs  in  allowing
   the  caller  to select the clock against which the sleep interval is to
   be measured, and in allowing the sleep  interval  to  be  specified  as
   either an absolute or a relative value.

   The clock_id argument [...] can have one of the following values:

   CLOCK_REALTIME   A settable system-wide real-time clock.

   CLOCK_MONOTONIC  A non-settable, monotonically  increasing  clock  that
                    measures time since some unspecified point in the past
                    that does not change after system startup.

   CLOCK_PROCESS_CPUTIME_ID
                    A settable per-process clock that  measures  CPU  time
                    consumed by all threads in the process.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM