回 帖 发 新 帖 刷新版面

主题:[讨论]如何做一个关于线程调度的静态线程库

求助,如何做一个关于线程调度的静态线程库
老师要求做一个线程函数库,不知道怎么做。

回复列表 (共2个回复)

沙发

#include<iostream.h>   
  //定义进程控制块列表   
  static   struct   
  {   
      int   id;//进程号   
      int   runtime;//进程所需运行时间   
      int   status;   //进程状态。1表示等待调度,0表示进程运行完成   
  }proc[3]={{0,20,1},{1,30,1},{2,10,1}};   
  //进程调度子程序,所需运行时间最短者优先调度   
  int   proc_manage();   
  int   proc_manage()   
  {   
    int   j,i,temp=0;   
    float   min;   
    for(i=0;proc[i].status==0&&i<3;i++){}//在进程控制块列表中找到第一个等待   
                                                                              //调度的进程   
    temp=i;   
    ~~~~~~~否则当i=1时,从下面for循环直接退出,返回temp=0。   
                  死循环为:   process2   is   running   
                                        process0   is   running   
                                        process0   is   running   
                                        ...   ...   
                                        ...   ...                                                                                                                                                   
    if(i<3)   
    {   
      for   (min=proc[i].runtime,j=i+1;j<3&&proc[j].status==1;j++)//在所有等待   
                                                                                                                          //调度的进程中   
              {                                                                                                           //寻找所需运行时间   
                if(proc[j].runtime<min)                                                             //   最短的   
    {   
      min=proc[j].runtime;   
      temp=j;   
    }   
              }   
      return   temp;   
    }   
    return   i;//如果i=3,则返回3   
  }   
  void   main()   
  {   
    int   m;   
    do   
    {   
      m=proc_manage();   
      switch(m)   
      {   
        case   0:   cout<<"process0   is   running"<<endl;   
        //process0();具体进程未写出   
        proc[0].status=0;//修改进程状态为“完成   ”   
        break;   
        case   1:   cout<<"process1   is   running"<<endl;   
        //process1();具体进程未写出   
        proc[1].status=0;//修改进程状态为“完成   ”   
        break;   
        case   2:   cout<<"process2   is   running"<<endl;   
        //process2();   具体进程未写出   
        proc[2].status=0;//修改进程状态为“完成   ”   
        break;   
        case   3:   break;   
      }   
    }while(m!=3);   
    cout<<"That's   all"<<endl;   
  }   

板凳

你可以不用结构体,取算法的核心,采用数组进行处理就可以了。用数组处理起来很简单,只需要考虑进程的runtime,至于进程的编号,你采取默认的123456。。。。

我来回复

您尚未登录,请登录后再回复。点此登录或注册