std :: queue :: pop () не удаляет объект - PullRequest
0 голосов
/ 14 марта 2019

Я пишу основной планировщик с одним ЦП, используя алгоритм 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();}
...