该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
//转载请注明原作者
程序源码:
/*sample code for priority thread attemper
by chaO
2007.10.22
*/
#include
#include
int i;//循环值
int j;//还在阻塞或就绪队列中的进程数
int s;
int m;//最大priority的id
struct pcb
{
int id;
int p; //priority
int cputime;
int alltime;
int startblock;
int blocktime;
int state; //0 表示ready 1表示end -1表示block
};
struct pcb pro[5]={
{0,9,0,3,2,3,0},
{1,38,0,3,-1,0,0},
{2,30,0,6,-1,0,0},
{3,29,0,3,-1,0,0},
{4,0,0,4,-1,0,0}
};
int changestate0()
{ if(pro[0].startblock==0)
{
pro[0].state=-1;
pro[0].startblock--;
return 1;
}
if(pro[0].blocktime==0)
{
pro[0].state=0;
return 1;
}
if(pro[0].state==0&&pro[0].startblock!=-1)
{pro[0].startblock--;return 1;}
if(pro[0].state==-1&&pro[0].blocktime!=0)
{pro[0].blocktime--;return 1;}
}
int state0()
{
changestate0();
s=pro[0].p;
if(pro[0].state==-1)
s=-100;
return s;
}
int maxp()//求出最大priority
{ state0();
int max=s;
m=pro[0].id;
for(i=0;i
{
if(pro[i+1].p>pro[i].p)
{
max=pro[i+1].p;
m=pro[i+1].id;
}
}
return m;
}
void change()
{
maxp();
int x;//得到m现在的数组编号
for(i=0;i
{
pro[i].p++;
}
for(i=0;i
{
if(pro[i].id==m)
x=i;
}
pro[x].cputime++;
pro[x].p=pro[x].p-4;
pro[x].alltime--;
if(pro[x].alltime==0)
{
pro[x].state=1;
}
}
void display()
{
change();
cout<
cout<
cout<
for(i=0;i
{
cout.width(10);
cout<
}
cout<
for(i=0;i
{
cout.width(10);
cout<
}
cout<
for(i=0;i
{
cout.width(10);
cout<
}
cout<
for(i=0;i
{
cout.width(10);
cout<
}
cout<
for(i=0;i
{
cout.width(10);
cout<
}
cout<
for(i=0;i
{
cout.width(10);
cout<
}
cout<
for(i=0;i
{
cout.width(10);
cout<
}
cout<
}
void main()
{
j=5;//刚开始有5个进程
while(j!=0)
{
for(i=0;i
{
if(pro[i].state==1){
for(;i
{pro[i]=pro[i+1];}
j=j-1;}
}
display();
getchar();
}
}