如何进行基于优先级的处理

时间:2021-01-29 18:00:25

标签: c data-structures linked-list

我有一个包含 n 个进程的链表,这些进程按运行优先级的降序排列。因此,第一个进程,即链表的第一个节点具有最大优先级,然后是第二个节点,依此类推。 有一次,我只能运行 8 个进程。我想要做的是,我希望同时运行 6 个最高优先级和 2 个最低优先级。

我所做的是重新排列链表,其中前六个节点具有最高优先级,接下来的两个节点具有最低优先级。然后再有 6 个高优先级和 2 个低优先级节点,并重复此操作直到覆盖所有节点。但这并没有达到我想要的效果,即如果 6 个最高优先级进程中的任何一个结束,那么另一个高优先级进程应该取而代之,如果一个低优先级进程结束,那么低优先级进程可能会取而代之。

我该如何实现? (这也是我的第一个问题,所以如果我提出问题的方式有任何问题,请指出)

1 个答案:

答案 0 :(得分:0)

我可以用两种方法解决这个问题。

  1. 无论如何使用这个 list 作为 dequeDeque 只是一个数据 像 queue 这样的结构,我们也可以从顶部推送和弹出元素 作为 queue 的底部。现在我们将维护 2 个计数器,High-counterLow-counterHigh-counter 将跟踪 6 高优先级 进程将低计数器将跟踪 2 低优先级 过程。所以高计数器将具有最大值 6 而低计数器 将有 2。开始时,将两个计数器都初始化为零。

    现在 High-counter < 6 ,从 dequeue 和 增加 High-counter。再次 while Low-counter < 2 ,弹出底部 dequeue 中的元素并增加 Low-counter。如果有任何高 优先级进程完成后,我们将递减 High-counter 和 低优先级进程类似。现在,计数器小于 它们各自的最大值,我们将使用一个while循环并重复 前两个 while 循环直到 Deque 为空。还要注意,这里的弹出过程意味着运行它们。

  2. 使用类似的方法,但这次用信号量代替计数器。

我不是在声明,我的解决方案是 100% 正确的,但它仍然接近答案。同时用操作系统标记问题以吸引更好的答案。

相关问题