首页 > 解决方案 > 在不使用繁忙等待实现的情况下休眠线程的最佳方法是什么?

问题描述

所以我试图降低我的模拟操作系统中的 CPU 利用率。我有一个函数可以暂停调用线程的执行,直到时间至少提前 x 个计时器滴答声。除非系统处于空闲状态,否则线程不必在恰好 x 个滴答声过去后唤醒,它会在等待适量的滴答声后放回就绪线程队列中。理想情况下,有一些信号量实现,但我不知道如何。也就是说,如果您对信号量有更好的解决方案,那么听到它也会很有趣。

对于一些参考,这里是带有描述的初始代码:

void timer_sleep (int64_t ticks){

  int64_t start = timer_ticks ();

  ASSERT (intr_get_level () == INTR_ON);
  while (timer_elapsed (start) < ticks)
    thread_yield ();
}

timer_ticks- 给我们自操作系统启动以来经过了多少滴答声。

timer_elapsed- 告诉我们timer_ticks()自另一个刻度数以来通过的数量。

intr_get_level- 用于获取中断是启用还是禁用的值。

thread_yield- 这会产生 CPU。当前线程不会进入睡眠状态,并且可能会在调度程序突发奇想的情况下立即再次调度。

标签: cmultithreadingsynchronizationmutexsemaphore

解决方案


推荐阅读