c - 在不使用繁忙等待实现的情况下休眠线程的最佳方法是什么?
问题描述
所以我试图降低我的模拟操作系统中的 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。当前线程不会进入睡眠状态,并且可能会在调度程序突发奇想的情况下立即再次调度。
解决方案
推荐阅读
- javascript - body onload 函数在我的示例(JavaScript)中不起作用
- search - Solr 搜索没有给出单个词项的确切结果
- javascript - 如何从浏览器控制台上可见的对象获取数据,但在我的代码上手动遍历它时返回 null?
- c++ - 十六进制到十进制转换器不起作用(c ++)
- angular - 从 ngxs 商店读取
- python - 使用其他模型的属性作为默认值
- laravel - Laravel livewire 和 vuejs 无限滚动
- flutter - Flutter 中受密码保护的 AlertDialog
- python - 使用超时设置从子进程捕获输出
- docker - docker compose 启动的一些容器如何管理