首页 > 解决方案 > alarm() 和 sleep() 到底是做什么的?

问题描述

如果我的时间片是 3 秒,我猜警报会每三秒停止一次进程的执行。睡觉有什么作用?它是否让进程休眠 3 秒?这对我来说没有意义 - 如果有很多流程怎么办?不是要睡久一点吗?

我正在使用循环刺激来做到这一点:

    while (head!=NULL)
      {
              alarm(TIMESLICE);
              sleep(TIMESLICE);
      }
      cout<<"no processes left"<<endl;

该代码有效,但我只是想了解究竟发生了什么,因为我是这个概念的新手。

标签: c++sleepalarm

解决方案


我猜警报会每三秒停止一次进程的执行。

有点。它安排在三秒钟内将信号发送到进程。然后,该过程可以正常继续,甚至可以根据需要忽略该信号。

睡觉有什么作用?它是否让进程休眠 3 秒?

正确的。

这对我来说没有意义 - 如果有很多流程怎么办?不是要睡久一点吗?

不,即使是从不休眠的进程也不能保证一直获得 CPU。未休眠的进程可能会或可能不会被安排在任何特定时间在核心上运行。一旦它不再休眠,它就可以运行了,调度器将决定何时以及多长时间让它使用什么内核。


推荐阅读