我正在尝试实现一个任务调度程序,其中我有 n 个任务。我的任务调度器背后的想法是,在向量的队列循环中,任务应该排入队列循环中最短的队列,这是通过以下代码完成的。
#include <vector>
#include <queue>
std::vector<std::queue<int> > q
int min_index = 0;
task t // implemented in the other part of the program
std::size_t size = q.size();
for( i=0; i<size; i++){ //accessing loop of queues
if(q[min_index].size() > q[i].size())
min_index = i; // Now q[min_index] is the shortest queue
}
q[min_index].push(Task);
接下来我试图扩展这个范例以减少调度程序的开销时间,而不是每次都搜索最短的队列,而是搜索一些条件,即。在 5 个任务进入最短队列后搜索最短队列。
我需要做这样的事情
#include <vector>
#include <queue>
std::vector<std::queue<int> > q
task t // implemented in the other part of the program
while(q[min_index].size()!=q[min_index].size()+5) // check whether current min_index queue's size is increased 5 more times if not goto enqueue
{
goto enqueue;
}
int min_index = 0;
std::size_t size = q.size();
for( i=0; i<size; i++){ //accessing loop of queues
if(q[min_index].size() > q[i].size())
min_index = i; // Now q[min_index] is the shortest queue
}
enqueue:
q[min_index].push(Task);
有人可以帮我如何正确进行。提前致谢
更新 而不是拥有 5(一个随机数),我想拥有一个每次都可靠且近似的数字。所以我想获取队列循环的 min_value 大小和 max_value 大小的差异,并每次将其与计数器进行比较。
// global variables
std::vector<std::queue<int> > q;
int counter = INT_MAX; //
int min_index = 0;
int max_size = -1;
void enqueue(scheduler::task new_task) {
if ( counter > diff_size ){
// look for new min and maximum
std::size_t size = q.size();
for( i=0; i<size; i++){
if(q[min_index].size() > q[i].size())
min_index = i;
if(q[i].size() > max_size)
max_size = q[i].size();
diff_size=max_size - min_index;
}
// counter reset
counter = 0;
}
// enqueue in minimum queue
q[min_index].push(new_task)
// increase counter
counter ++;
}