c语言 - 如何进行基于优先级的处理



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

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

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

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

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新