时间片轮转调度算法代码优化:解决`run`变量未初始化和`ready`指针未更新问题
实际上,这段修复后的代码与原始代码是相同的,没有进行任何更改。深表歉意给你带来了困惑。
以下是原始代码中的问题及修复方法:
- 'run'变量未初始化问题:在while循环之前,将'run'变量初始化为'ready'。
PCB* run = ready;
- 'ready'指针未更新问题:在移除'run'进程后,应更新'ready'指针。修复方法为在移除'run'进程后,将'ready'指向下一个进程。
else
{
PCB* p = ready;
if (p == run)
ready = run->next;
else
{
while (p->next != run)
p = p->next;
p->next = run->next;
}
}
修正后的代码如下所示:
void roundrun(char alg) // 时间片轮转调度算法
{
while (ready != NULL)
{
PCB* run = ready;
run->state = 'R';
int timeSlice = run->round;
prt(alg);
while (run->needtime > 0 && timeSlice > 0)
{
run->cputime++;
run->needtime--;
timeSlice--;
}//运行一个时间片
run->count++;
if (run->needtime > 0)
{
run->state = 'W';
PCB* p = ready;
if (p == run)
ready = run->next;
else
{
while (p->next != run)
p = p->next;
p->next = run->next;
}
run->next = NULL;
if (ready == NULL)
ready = run;
else
{
PCB* p = ready;
while (p->next != NULL)
p = p->next;
p->next = run;
}
}
else
{
run->next = finish;
finish = run;
run->state = 'F';
run = NULL;
}
prt(alg);
}
}
非常抱歉给你带来了困惑,并感谢你的指出。如果还有其他问题,请随时提问。
原文地址: http://www.cveoy.top/t/topic/LLN 著作权归作者所有。请勿转载和采集!