微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

计算抢占式 SJF 调度不工作的所有时间的 C 程序

如何解决计算抢占式 SJF 调度不工作的所有时间的 C 程序

#include <stdio.h>
#include <string.h>
#define MAX 1000
int main()
{
  int at[] = {7,5,3,4};
  int bt[] = {8,1,6};
  int x = sizeof(arrival_time) / sizeof(arrival_time[0]);
  int min[x];
  int pid[x];
  int ct[x];
  int tat[x];
  int wt[x];
  int flag[x];
  int st = 0,total = 0;
  float avg_wt = 0,avg_turnaround_time = 0;
  for (int i = 0; i < x; i++)
  {
    pid[i] = i + 1;
    flag[i] = 0;
    min[i] = bt[i];
  }
    while(1)
  {
    int temp = -1,minBurst = MAX;

    if(total == x)
    break;

    for (int i = 0; i < x; i++)
    {
        if ( (st >= at[i]) &&
         (bt[i] < minBurst) && flag[i] == 1 )
          {
            minBurst = bt[i];
            temp = i;
          }
    }
   
    if ( temp == -1 )
      st++;

    else
    {

      bt[temp]--;
      st++;

      if (bt[temp] == 0)
      {
        ct[temp] = st;
       flag[temp] = 1;
        totaL++;
      }
    }
  }

当我尝试运行程序时没有输出,也没有错误。我怀疑 else 语句中存在问题,但无法指出。我已经确定没有系统编译器问题。我正在使用 Ubuntu 20.04 LTS。

解决方法

错误似乎在这里:

&& is_completed[i] == 1

由于 is_completed[i] 被初始化为零,所以这总是假的。因此,您永远不会进入处理数据的代码,因此 temp 将停留在 -1。换句话说 - 你只会不断增加系统时间,while 将是一个无限循环,因为 (total == x) 将一直为假。

试试:

&& is_completed[i] == 0

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。