【问题标题】:Is function sleep() active on passive?函数 sleep() 是否在被动状态下处于活动状态?
【发布时间】:2016-09-30 15:09:07
【问题描述】:

C 中的函数 sleep() 是主动等待还是被动等待?

既然它停止了线程运行,它是否总是检查时间是否已经过去:

while(1){
//need to wake?
}

或者像这样的被动:

alarm(sec);

pause(); // wait for the alarm and sleeping?

系统是unix。

【问题讨论】:

    标签: c operating-system system sleep system-calls


    【解决方案1】:

    sleep()standard POSIX function

    sleep() 函数将导致调用线程被挂起 从执行直到指定的实时秒数 通过参数 seconds 已经过去或信号被传递到 调用线程,它的动作是调用一个信号捕获函数 或终止进程。暂停时间可能长于 由于系统安排了其他活动而请求。

    ...

    【讨论】:

      【解决方案2】:

      sleep() 函数的实现有两种通用方法。

      一种是使用alarm() 函数来调度一个SIGALRM 信号,然后挂起等待该信号的调用线程。另一种是实施独立的设施。

      函数 sleep() 在 unix 中处于被动等待状态。

      【讨论】:

        【解决方案3】:

        sleep 不是标准 C 库函数。

        如果你的平台有它,它几乎肯定会调用操作系统来挂起线程(也就是说,在你的符号中,被动)。

        它不会采用while(1){}-type 惯用语,因为这会不必要地烧毁 CPU。

        【讨论】:

        • 正确的术语是什么?如果我想到锁,我会说忙等待与睡眠。
        猜你喜欢
        • 1970-01-01
        • 2013-04-06
        • 1970-01-01
        • 2020-01-11
        • 2016-01-10
        • 2019-12-10
        • 1970-01-01
        • 2013-09-12
        • 2020-03-02
        相关资源
        最近更新 更多