当前位置: 首页 > 知识库问答 >
问题:

具有更改优先级特性的优先级队列,该特性使元素保持有序

廉志强
2023-03-14

我正在寻找一种通过优先级和先到先服务(FCFS)调度线程的方法,如果两个线程具有相同的优先级。我在考虑使用一堆队列或类似的东西。问题是,即使我实现了自己的优先级队列,更改优先级的能力也会破坏插入到该队列的顺序。

共有1个答案

利海阳
2023-03-14

可能是我没有正确理解您的问题,但您可以为每个优先级设置一个单独的列表。
因此每个线程都会根据其优先级添加到相应的列表中。而且,由于总是在列表的末尾添加,然后从列表的头部删除,因此会有一个FCFS行为。

您还可以创建一个优先级队列来检索具有最低优先级的下一个线程(O(1)获取下一个线程,O(logN)插入。为了比较,您可以使用每个节点的优先级和插入时间的组合。

 类似资料:
  • 我在这个问题上发现了一些类似的问题,但我想再问一遍,以便得到一个更明确的答案。我正在编写一个图匹配算法,其中图上的每个节点分配给一个优先级集,取决于其邻居的匹配。细节其实并不重要,但我使用了std::priority_queue以便首先匹配最高优先级的节点。这里有一个棘手的问题:每次引入一个新的匹配,匹配节点的邻居的优先级将被更新。 我的问题自然是,如何更新新匹配的顺序?我能强制执行吗?或者是否有

  • 我需要一个优先级队列,它首先获得具有最高优先级值的项目。我当前正在使用队列库中的PriorityQueue类。但是,这个函数只先返回值最小的项。我尝试了一些很难看的解决方案,比如(sys.maxint-priority)作为优先级,但我只是想知道是否存在更优雅的解决方案。

  • 我正在使用std::priority\u队列和std::vector中的一些自定义对象。现在假设在调用top()函数时,有具有相同优先级的对象,我会按从最旧到最新的顺序获取它们。那么我的问题是,有没有可能改变这种行为,以便top()在优先级相同的情况下返回最近的对象?

  • 我想知道,一旦对象被删除并重新插入队列以更新其优先级,是否无论如何都要保持优先级队列中对象的优先级? 我这样做的方法是从优先级队列中删除对象,并将更新后的对象再次放入队列中。然而,这将破坏我使用<code>比较器实现的自然排序 <代码>比较器 : 例如 按以下顺序插入:约翰、亚历克斯、科比、简 优先级队列的形式如下:[Jane,100],[Kerby,59],[Alex,33],[John,13]

  • 我正在尝试在滑动窗口中打印最大值。将窗口大小的元素,这里k=3放入优先级队列(Maxheap),然后查看值。”heap.Init(

  • 这些天,我阅读了一些关于和的文档。我了解到Javascript是一个单线程,每次只会执行一段代码。同时,如果有事件发生,它会被推送到事件队列中并阻塞,直到适当的时间。我想知道,当许多事件被阻塞等待同时执行时。这些事件是否具有不同的优先级,因此高优先级事件会在低优先级事件之前执行。或者只是一个FIFO队列。 在上面的代码中,setTimeout fn1将在10 ms发生,Click事件处理程序fn2