#include <bits/stdc++.h>
using namespace std;
struct Process {
string name;
int burstTime;
int remainingTime;
Process( string n, int bt)
{
name = n;
burstTime = bt;
remainingTime = bt;
}
} ;
void roundRobin( queue < Process> & processQueue, int timeQuantum)
{
// Copy hang doi ban dau
queue< Process> readyQueue = processQueue;
int currentTime = 0 ;
while ( ! readyQueue.empty ( ) )
{
Process currentProcess = readyQueue.front ( ) ;
readyQueue.pop ( ) ;
cout << "Time " << currentTime << ": Processing " << currentProcess.name ;
if ( currentProcess.remainingTime <= timeQuantum)
{
currentTime + = currentProcess.remainingTime ;
currentProcess.remainingTime = 0 ;
cout << " finished at time " << currentTime << endl;
}
else
{
currentTime + = timeQuantum;
currentProcess.remainingTime - = timeQuantum;
cout << " (remaining time: " << currentProcess.remainingTime << ")" << endl;
readyQueue.push ( currentProcess) ;
// Dua tien trinh tro lai cuoi hang doi
}
}
cout << "All processes completed at time " << currentTime << endl;
}
int main( )
{
queue < Process> processes;
processes.push ( Process( "P1" , 4 ) ) ;
processes.push ( Process( "P2" , 5 ) ) ;
processes.push ( Process( "P3" , 2 ) ) ;
int timeQuantum = 2 ;
roundRobin( processes, timeQuantum) ;
return 0 ;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IFByb2Nlc3MgewogICAgc3RyaW5nIG5hbWU7CiAgICBpbnQgYnVyc3RUaW1lOwogICAgaW50IHJlbWFpbmluZ1RpbWU7CgogICAgUHJvY2VzcyhzdHJpbmcgbiwgaW50IGJ0KQogICAgewogICAgICAgIG5hbWUgPSBuOwogICAgICAgIGJ1cnN0VGltZSA9IGJ0OwogICAgICAgIHJlbWFpbmluZ1RpbWUgPSBidDsKICAgIH0KfTsKCnZvaWQgcm91bmRSb2JpbihxdWV1ZSA8UHJvY2Vzcz4gJnByb2Nlc3NRdWV1ZSwgaW50IHRpbWVRdWFudHVtKSAKewogICAgLy8gQ29weSBoYW5nIGRvaSBiYW4gZGF1CiAgICBxdWV1ZTxQcm9jZXNzPiByZWFkeVF1ZXVlID0gcHJvY2Vzc1F1ZXVlOyAKICAgIGludCBjdXJyZW50VGltZSA9IDA7CgogICAgd2hpbGUgKCFyZWFkeVF1ZXVlLmVtcHR5KCkpIAogICAgewogICAgICAgIFByb2Nlc3MgY3VycmVudFByb2Nlc3MgPSByZWFkeVF1ZXVlLmZyb250KCk7CiAgICAgICAgcmVhZHlRdWV1ZS5wb3AoKTsKCiAgICAgICAgY291dCA8PCAiVGltZSAiIDw8IGN1cnJlbnRUaW1lIDw8ICI6IFByb2Nlc3NpbmcgIiA8PCBjdXJyZW50UHJvY2Vzcy5uYW1lOwoKICAgICAgICBpZiAoY3VycmVudFByb2Nlc3MucmVtYWluaW5nVGltZSA8PSB0aW1lUXVhbnR1bSkgCiAgICAgICAgewogICAgICAgICAgICBjdXJyZW50VGltZSArPSBjdXJyZW50UHJvY2Vzcy5yZW1haW5pbmdUaW1lOwogICAgICAgICAgICBjdXJyZW50UHJvY2Vzcy5yZW1haW5pbmdUaW1lID0gMDsKICAgICAgICAgICAgY291dCA8PCAiIGZpbmlzaGVkIGF0IHRpbWUgIiA8PCBjdXJyZW50VGltZSA8PCBlbmRsOwogICAgICAgIH0gCiAgICAgICAgZWxzZSAKICAgICAgICB7CiAgICAgICAgICAgIGN1cnJlbnRUaW1lICs9IHRpbWVRdWFudHVtOwogICAgICAgICAgICBjdXJyZW50UHJvY2Vzcy5yZW1haW5pbmdUaW1lIC09IHRpbWVRdWFudHVtOwogICAgICAgICAgICBjb3V0IDw8ICIgKHJlbWFpbmluZyB0aW1lOiAiIDw8IGN1cnJlbnRQcm9jZXNzLnJlbWFpbmluZ1RpbWUgPDwgIikiIDw8IGVuZGw7CiAgICAgICAgICAgIHJlYWR5UXVldWUucHVzaChjdXJyZW50UHJvY2Vzcyk7CiAgICAgICAgICAgIC8vIER1YSB0aWVuIHRyaW5oIHRybyBsYWkgY3VvaSBoYW5nIGRvaQogICAgICAgIH0KICAgIH0KICAgIGNvdXQgPDwgIkFsbCBwcm9jZXNzZXMgY29tcGxldGVkIGF0IHRpbWUgIiA8PCBjdXJyZW50VGltZSA8PCBlbmRsOwp9CgppbnQgbWFpbigpIAp7CiAgICBxdWV1ZSA8UHJvY2Vzcz4gcHJvY2Vzc2VzOwogICAgcHJvY2Vzc2VzLnB1c2goUHJvY2VzcygiUDEiLCA0KSk7CiAgICBwcm9jZXNzZXMucHVzaChQcm9jZXNzKCJQMiIsIDUpKTsKICAgIHByb2Nlc3Nlcy5wdXNoKFByb2Nlc3MoIlAzIiwgMikpOwoKICAgIGludCB0aW1lUXVhbnR1bSA9IDI7CiAgICByb3VuZFJvYmluKHByb2Nlc3NlcywgdGltZVF1YW50dW0pOwoKICAgIHJldHVybiAwOwp9