我需要让Round Robin工作,但它无法正常工作

时间:2014-02-12 23:06:58

标签: c scheduler rounding

我正在尝试让循环调度程序正常工作,不幸的是,尽管流泪已经流泪,但它似乎仍然在我的代码中的某个地方出错。这是我的功能:

//function that processes the head of the CPU queue (RR version)
int process2 (NodePtr *headcpu, NodePtr *tailcpu, int *count, int timeslice) {

   NodePtr temp2;
   NodePtr temp3;

    (*headcpu)->cpu_time = (*headcpu)->cpu_time - timeslice;

    (*count) = (*count) + timeslice;

  //if statement starts
      if ((*headcpu)->cpu_time <= 0){

         temp3 = dequeue_cpu(headcpu, tailcpu);

         print_result (temp3, count);//call to print_result function

      }//if statement ends

   //else statement starts
     else {

         temp2 = *headcpu;
         *headcpu = (*headcpu)->next;
         (*tailcpu)->next = temp2;
         *tailcpu = temp2;
         (*tailcpu)->next = NULL;

      }//else statement ends

   return 0;//successful termination

}//end process2 function

这是我的输出:

3788   230   31

5001   401   39

5002   402   41

7979   461   63

7919   461   65

1008   72   75

3784   230   87

5000   400   97

7999   456   111

7909   458   115

7989   460   117

7929   462   119


Program received signal SIGSEGV, Segmentation fault.

此输出是使用36个样本长的测试文件生成的,正如您所看到的,只有少数值似乎打印出来并且不正确。我得到了一个段错误。

有人可以确定问题的根源吗?

1 个答案:

答案 0 :(得分:1)

这看起来不错:

(*tailcpu)->next = temp2;
*tailcpu = temp2;
(*tailcpu)->next = NULL;

查看您正在做的事情 - 第一个作业将(*tailcpu)->next设置为temp2。从现在开始,你失去了对(*tailcpu)->next中所有内容的引用。不仅如此,下一个任务(*tailcpu = temp2)还会破坏你想要通过之前任务实现的任何目标。