Pau*_*ton 5 c++ multithreading asynchronous priority-queue data-structures
一些背景:我正在构建一个C++
线程管理器,它允许用户创建一个AsyncJob
对象并分配执行优先级。我有一个JobManager
单例类,它管理这些的优先级队列AsyncJobs
,并在可用时将它们分配给线程。
问题:用户需要能够修改优先级AFTER
创建。例如,基于某些运行时事件,某个文件可能需要比其他文件更紧急地加载。我面临的问题是,优先级队列仅在调用push()
或时对内部堆上的元素进行重新排序。pop()
据我所知,没有公开的界面允许人们根据不断变化的优先级请求重新排序。
我想做的是这样的:
hashmap
在我的类中创建一个JobManager
,它保存指向优先级队列中对象的指针JobManager
向优先级队列发出优先级已更改的信号解决这个问题的最佳方法是什么?我应该创建自己的自定义优先级队列类吗?或者也许从 延伸std::priority_queue
?
谢谢!
一种选择可能是允许您的 AsyncJob 具有“已取消”状态,并且在取消旧的优先级后,每次修改优先级时只需将新的 AsyncJob(副本)添加到您的 PQ 中。
与许多事情一样,我认为“最佳方式”是非常主观的,因为它取决于您受到的限制程度以及您如何量化“最佳”。就我个人而言,如果可能的话,我喜欢避免从标准库类型派生并重新发明容器结构。