实际上,这段修复后的代码与原始代码是相同的,没有进行任何更改。深表歉意给你带来了困惑。

以下是原始代码中的问题及修复方法:

  1. 'run'变量未初始化问题:在while循环之前,将'run'变量初始化为'ready'。
PCB* run = ready;
  1. '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);
    }
}

非常抱歉给你带来了困惑,并感谢你的指出。如果还有其他问题,请随时提问。

时间片轮转调度算法代码优化:解决`run`变量未初始化和`ready`指针未更新问题

原文地址: http://www.cveoy.top/t/topic/LLN 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录