主题:[讨论]如何做一个关于线程调度的静态线程库
烟雨迷蒙
[专家分:0] 发布于 2007-11-29 23:03:00
求助,如何做一个关于线程调度的静态线程库
老师要求做一个线程函数库,不知道怎么做。
回复列表 (共2个回复)
沙发
最忆成都 [专家分:780] 发布于 2007-11-30 13:52:00
#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;
}
板凳
最忆成都 [专家分:780] 发布于 2007-11-30 13:54:00
你可以不用结构体,取算法的核心,采用数组进行处理就可以了。用数组处理起来很简单,只需要考虑进程的runtime,至于进程的编号,你采取默认的123456。。。。
我来回复