我正在使用FCFS算法编写一个基本的单CPU调度程序。出于某种原因,当我尝试从队列中弹出突发时,实际上并没有将其删除。
功能如下:
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()
之前和之后打印IO时间,每次都相同。
编辑:
这是getBurstQ()
的定义:
queue<Burst*> Thread::getBurstQ(){
return bursts;
};
然后关于条件,实际上,调用io_burst()
的函数检查以确保其不为空,这也可能是多余的?但是,是的,我知道了,切换条件的顺序肯定更有意义。我现在这样调用该函数。
if(!blocked.empty()){io_burst();}