中级农民
- 积分
- 102
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2012-10-9
- 最后登录
- 1970-1-1
|
我来写个C++版本的,请大家看看对不对
// round-robin.cpp
#include <iostream>
#include <queue>
using namespace std;
class process{
public:
int arrive;
int execute;
process(int arr, int exec){
arrive = arr, execute = exec;
}
};
double roundRobin(int* arrive, int* execute, int numOfProcess, int q){
queue<process*> myqueue;
int currentTime = 0, procCounter = 0, totalWait = 0, clock;
process* currentProcess = NULL;
for(; 1; currentTime++){
if(currentProcess != NULL){ // change current process status
totalWait += (myqueue.size());// all processes in queue have to wait such time
currentProcess->execute--;// execute time reduce 1
if(currentProcess->execute == 0){// current process finished.
if(!myqueue.empty()){
clock = currentTime;
currentProcess = myqueue.front();
myqueue.pop();
}
else break;// all processes finished
}
else{// current not finished
if(currentTime - clock == q){// time quantum finished, top process in queue pop out
clock = currentTime;
myqueue.push(currentProcess);
currentProcess = myqueue.front();
myqueue.pop();
}
}
}
if(procCounter < numOfProcess && arrive[procCounter] == currentTime){// new process pushed into queue
process* temp = new process(arrive[procCounter], execute[procCounter]);
myqueue.push(temp);
procCounter++;
}
if(currentProcess == NULL && !myqueue.empty()){// only for first process
currentProcess = myqueue.front();
myqueue.pop();
clock = currentTime;
}
}
return (double)totalWait / (double)numOfProcess;
}
补充内容 (2015-12-19 07:23):
有一个地方理解有点问题,从testcase来看在一个time quantum 结束同时,如果有新process进队列的话,是新process先进队列,time quantum结束时的原运行进程后进队列,所以三个if顺序要变一下 |
|