You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++编写Round Robin调度程序调度多进程时运行卡死问题咨询

问题原因

你的代码存在两处核心逻辑错误,是程序卡死的直接原因:

  • 未处理调度空转场景:当所有已到达的进程都执行完毕,但还有未到达的后续进程时,原有逻辑会让遍历下标i反复重置为0,一直循环处理已经执行完成的进程,time值不会增长,永远等不到后续进程到达,触发死循环。
  • temp变量未初始化:声明temp时没有赋予初始值,首次访问时是内存随机值,可能导致逻辑判断异常。

修复后代码

#include<iostream>
#include<vector>
#include<climits>
using namespace std;

int main()
{
    int i,n,time,remaining,temp=0,quantum_time;
    int wt=0,atat=0; //wt = Waiting Time, atat = Average Turn Around Time
    cout<<"Enter the number of processes to be scheduled"<<endl;
    cin>>n;
    remaining=n;
    
    vector<int>at(n);
    vector<int>bt(n);
    vector<int>rt(n); //Dynamic array declaration using 'vector' library
    
    cout<<"Enter the Arrival Time and Burst Time for all the processes"<<endl;
    for(i=0;i<n;i++)
    {
        cin>>at[i];
        cin>>bt[i];
        rt[i]=bt[i];
    }
    cout<<"Enter the Quantum Time:"<<endl;
    cin>>quantum_time;
    cout<<"\n\nProcess\t\t: Arrival Time\t:  Burst Time\t:  Turnaround Time  : Waiting Time\n\n";
    for(time=0,i=0;remaining!=0;)
    {
        // 先找下一个已到达且未执行完的进程
        int next_i = -1;
        for(int j=0;j<n;j++)
        {
            int cur = (i + j) % n;
            if(at[cur] <= time && rt[cur] > 0)
            {
                next_i = cur;
                break;
            }
        }
        // 没有可执行进程,跳转到下一个最早到达的进程的时间点
        if(next_i == -1)
        {
            int min_at = INT_MAX;
            for(int j=0;j<n;j++)
            {
                if(rt[j]>0 && at[j] < min_at)
                {
                    min_at = at[j];
                }
            }
            time = min_at;
            continue;
        }
        i = next_i;
        
        if(rt[i]<=quantum_time&&rt[i]>0)
        {
            time+=rt[i];
            rt[i]=0;
            temp=1;
        }
        else if(rt[i]>0)
        {
            rt[i]-=quantum_time;
            time+=quantum_time;
        }
        if(rt[i]==0&&temp==1)
        {
            remaining--;
            printf("Process{%d}\t:\t%d\t:\t%d\t:\t %d\t    :\t   %d\n",i+1,at[i],bt[i],time-at[i],time-at[i]-bt[i]);
            cout<<endl;
            wt += time-at[i]-bt[i];
            atat += time-at[i];
            temp=0;
        }
        // 下标偏移到下一个,下次循环从下一个开始找
        i = (i+1)%n;
    }
    cout<<"Average Waiting Time: "<<wt*1.0/n<<endl;
    cout<<"Average TurnAround Time: "<<atat*1.0/n<<endl;
    return 0;
}

内容的提问来源于stack exchange,提问作者Yash Gajakosh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 16:54:03