Я пишу основной планировщик с одним ЦП, используя алгоритм FCFS. По какой-то причине, когда я пытаюсь извлечь пакет из очереди, он фактически не удаляет его.
Вот функция:
void Simulator::io_burst(){
//check the blocked pque for threads ready to be moved to 'ready', pop burst from burst queue
while(blocked.top()->getBlockTime() <= totalTime && !(blocked.empty())){
blocked.top()->updateState(3);
Event* e = new Event(4, blocked.top(), blocked.top()->getBlockTime());
events.push(e);
printEvent(blocked.top()->getBlockTime(), e);
cout << "IO TIME before" << blocked.top()->getBurstQ().front()->getIO() << endl;
blocked.top()->getBurstQ().pop();
cout << "IO TIME after" << blocked.top()->getBurstQ().front()->getIO() << endl;
ready.push(blocked.top());
blocked.pop();
}
};
Я печатаю время ввода-вывода до и после pop()
, и они всегда одинаковы.
Edit:
Вот определение getBurstQ()
:
queue<Burst*> Thread::getBurstQ(){
return bursts;
};
А затем об условной функции, которая вызывает io_burst()
, на самом деле проверяет, не является ли она пустой, что также может быть избыточным ?? Но да, я вас понял, определенно имеет смысл поменять порядок условий. В настоящее время я вызываю эту функцию.
if(!blocked.empty()){io_burst();}