者进程加入到就绪队列;初始化缓冲区。 void init() {
s1.type='a'; s1.val=10; s2.type='b'; s2.val=0; m1.type='c'; m1.val=1; m2.type='d'; m2.val=1;
for(int i=0;i char str2[2]={'P','\\0'}; char * str; str = join(str2,str1); strcpy(producter[i].name,str); producter[i].state='R';//就绪态,要加入就绪队列 21 producter[i].why=' '; producter[i].dd=0; ready[irn++]=&producter[i];//将生产者加入就绪队列 } for(int j=0;j char str2[2]={'C','\\0'}; char * str; str = join(str2,str1); strcpy(consumer[j].name,str); consumer[j].state='R'; consumer[j].why=' '; consumer[j].dd=0; ready[irn++]=&consumer[j];//将消费者加入就绪队列 } for(int k=0;k<10;k++) { array[k] = ' '; 22 } } //处理器调度 随机调度一个在就绪队列中的进程,判断是生产者进程还是消费者进程,执行不同的语句,执行一条指令后(执行后pc的值加1),重新调度。 void diaodu() { while(irn!=0){ x=rand()%irn; rx=x; process=ready[x]; pc=process->dd; if(process->name[0]=='P'){ pt=pc; pc++; switch(pt){ case 0:p(&s1);process->dd=pc;break; case 1:p(&m1);process->dd=pc;break; case 2: put();process->dd=pc;break; case 3:v(&m1);process->dd=pc;break; case 4:v(&s2);process->dd=pc;break; 23 case 5: gotol();process->dd=pc; } } else if(process->name[0]=='C'){ pt=pc; pc++; switch(pt){ case 0:p(&s2);process->dd=pc;break; case 1:p(&m2);process->dd=pc;break; case 2:get();process->dd=pc;break; case 3:v(&m2);process->dd=pc;break; case 4:v(&s1);process->dd=pc;break; case 5:gotol();process->dd=pc; } } }//end while printf(\程序结束!\\n\此程序没有结束的时候,固不需要改就绪态为运行态,也没有完成态 } 24
相关推荐: