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

如何实现Round-Robin调度的时间线全进程状态表格打印

Round-Robin调度时间线打印问题解决

问题需求

实现Round-Robin调度的时间线打印功能,要求按给定时间量子间隔输出所有进程信息:

  • 正在处理的进程排在最前
  • 其余未处理进程排在后面
  • 已完成的进程不再打印

给定输入:

char  name[50][10] = {"A","B","C","D","E"}; // process names
int  btime[] = {9,7,8,5,3}; // process burst times
int n = 5;

预期输出示例:

Round robin scheduling with time quantum = 2
0: (A,9,9) (B,7,7) (C,8,8) (D,5,5) (E,3,3)
2: (B,7,7) (C,8,8) (D,5,5) (E,3,3) (A,9,7)
4: (C,8,8) (D,5,5) (E,3,3) (A,9,7) (B,7,5)
...

当前代码问题:仅能打印正在运行的单个进程,无法输出同一时间点的其他未执行进程。

解决方案

原代码的核心问题是未遍历所有未完成进程来输出完整列表。调整逻辑后,在每次处理进程时,先打印当前时间点的所有未完成进程(当前处理的排最前),再更新进程状态和时间戳。

修改后的代码:

#include <stdio.h>

int main()
{
    char name[50][10] = {"A", "B", "C", "D", "E"}; // process names
    int btime[] = {9, 7, 8, 5, 3};                // process burst times
    int n = sizeof btime / sizeof btime[0];
    int quantum = 2;
    int wt[n];
    int rem_bt[n];
    for (int i = 0; i < n; i++)
        rem_bt[i] = btime[i];

    printf("Round robin scheduling with time quantum = %d\n", quantum);
    int t = 0;
    while (1)
    {
        int done = 1;
        // 遍历所有进程,处理每个未完成的进程
        for (int i = 0; i < n; i++)
        {
            if (rem_bt[i] > 0)
            {
                done = 0;
                // 打印当前时间点的所有未完成进程:当前处理的进程排最前
                printf("%d: ", t);
                printf("(%s,%d,%d) ", name[i], btime[i], rem_bt[i]);
                // 打印其余未完成进程
                for (int j = 0; j < n; j++)
                {
                    if (j != i && rem_bt[j] > 0)
                    {
                        printf("(%s,%d,%d) ", name[j], btime[j], rem_bt[j]);
                    }
                }
                printf("\n");

                // 更新当前进程的剩余时间与时间戳
                if (rem_bt[i] > quantum)
                {
                    rem_bt[i] -= quantum;
                    t += quantum;
                }
                else
                {
                    t += rem_bt[i];
                    wt[i] = t - btime[i]; // 修正等待时间计算逻辑
                    rem_bt[i] = 0;
                }
            }
        }
        if (done == 1)
        {
            break;
        }
    }

    return 0;
}

关键改动说明

  • 完整进程列表打印:处理每个进程前,先输出当前时间,再依次打印当前处理的进程和其余未完成进程,确保时间线信息完整。
  • 修正等待时间计算:原代码中等待时间公式错误,改为完成时间 - 总执行时间的正确逻辑。
  • 格式对齐:严格按照预期格式输出进程信息,保证与示例输出一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 07:15:29