如果两个线程具有相同的优先级,我正在寻找一种按优先级和First-Come-First Serve(FCFS)调度线程的方法。我正在考虑使用一堆队列或类似的东西。问题在于,即使我实现了自己的优先级队列,更改优先级的能力也会破坏插入此队列的顺序。
为了解决这个问题,我可以节省每个线程的插入时间,并按插入时间(作为主要Priority参数的辅助参数)对优先级队列进行排序,但我相信存在数据结构的组合这可以在不使用插入时间的情况下解决问题。
复杂性应该是O(logN)
(有一些具有O(N)
复杂性的天真解决方案,例如拥有常规队列,并且每当我们必须弹出一个线程时迭代队列。)
答案 0 :(得分:2)
可能是我没有正确解决您的问题,但您可以为每个优先级单独列出一个列表 因此,每个线程都会根据其优先级添加到相应的列表中。而且,由于您始终在列表的末尾添加并从头部删除,因此您将具有FCFS行为。
您还可以创建一个优先级队列来检索具有最低优先级的下一个线程(O(1)以获取下一个线程并且要插入O(logN)。为了进行比较,您可以使用每个优先级和插入时间的组合。节点。