zoukankan      html  css  js  c++  java
  • 排序

    #include <stdio.h>
    #include <stdlib.h> 
    #include <conio.h> 
    #include <windows.h> 
    #define NULL 0 
    struct spcb { 
    char name;  
    char state;  
    char why;  
    int  dd  
    }; 
    typedef struct spcb pcb; 
    pcb producter,consumer,*process,*process1; 
    int s1,s2,i,j,in,out,pc,m; 
    char array[10]; 
    char c,x; 
    int pa[6],sa[6];  
    int p(int s) /* p操作原语 */ 
    {
      s=s-1;
      if(s<0)  
    {   
    process->state='B'; /* B表示阻塞*/ 
      process->why='s'; 
     }  
    else 
    {   
    process->state='W'; /* W表示就绪*/  
    }  
    return(s); 
    }  
    int v(int s) /*v操作原语*/ 
    {  
    s=s+1;  
    if(s<=0)  
    {  
     process1->state='W'; 
     } 
     process->state='W';  
    return(s); 
    }  
    char RanChar() 
    {  
    char arr[10]={'a','b','c','d','e','f','g','h','i','j'};  
    return arr[abs(rand()%10)]; 
    }  
    void put() 
    { 
    // printf("
     please product anychar!"); 
    // scanf("
    %c",&c);  Sleep(1000);  
    array[in]=RanChar();  in=(in+1)%10; 
     printf(" product a char is %c!
     ",array[in-1]); 
     int k = 0; 
    for(m=0;m<10;m++)  
    {   
    if (array[m]!=' ') 
    {    
    printf("%c",array[m]);   
     k = k+1;  
    }          
      } 
     printf("缓冲池中有%d个产品
    ",k); } 
    void get() 
    {  
    Sleep(1000);  
    x=array[out]; 
    printf("
    %c get a char fron buffer",x); 
     printf("
    ");     array[out]=' ';  
    out=(out+1)%10;    
     int k = 0; 
    for(m=0;m<10;m++)  
    {  
     if (array[m]!=' ')
     {   
     printf("%c",array[m]);   
     k = k+1;  
     }      
      } 
    
    
    
      
    
    
     printf("缓冲池中有%d个产品
    ",k); }   
    void gotol() 
    {  
    pc=0;
     }  
    void nop() 
    {;}  
    void disp() /*建立进程显示函数,用于显示当前进程*/  
    {   
    printf("
     name 	 state 	 why 	 dd  
    ");  
     printf("|%c	",process->name);
       printf("|%c	",process->state);  
     printf("|%c	",process->why); 
      printf("|%d	",process->dd);  printf("
    "); 
     }  
    void init()/*初始化程序*/
    {  
    s1=10;/*s1表示空缓冲区的数量*/  
    s2=0; /*s2表示满缓冲区的数量*/  
    producter.name='p';/*对生产者进程初始化*/  
    producter.state='W'; 
     producter.why=' '; 
     producter.dd=0; 
     consumer.name='c';/*对消费者进程初始化*/  
    consumer.state='W';  
    consumer.why=' '; 
     consumer.dd=0; 
     for(int k=0;k<10;k++)  
    {   
    array[k] = ' ';  
    } 
    }  
    void bornpa() /*将生产者程序装入pa[]中*/ 
    { 
     for(i=0;i<=3;i++)  
     {   
    pa[i]=i; 
    
    
    
      
    
    
     } 
    }  
    void bornsa()/*将消费者程序装入sa[]中*/
     { 
     for(i=0;i<=3;i++)  
    {   
    sa[i]=i;
      }
     } 
    void diaodu()/*处理器调度程序*/ 
    { 
     while((producter.state=='W')||(consumer.state=='W')) 
     {   
    x=rand();/*x随机获得一个数*/ 
      x=x%2;/*对X取于*/  
     if(x==0)/*若X等于零,则执行生产者进程,反之执行消费者进程*/   
    {    
    process=&producter;/*process表示现行进程,将现行进程置为生产者进程*/   
     process1=&consumer;   
    }  
     else   
    {   
     process=&consumer;  
      process1=&producter; 
      }   
    pc=process->dd;
       i=pc;/*此时把PC的值付给I*/   
    if((process->name=='p')&&(process->state=='W'))  
     {       
    j=pa[i];   
     pc=i+1;  
      switch(j)   
     {        
    case 0: 
    s1=p(s1);
    process->dd=pc;
    break;    
    case 1:
     put();
    process->state='W';
    process->dd=pc;break;    
    case 2: s2=v(s2);
    process->dd=pc;break;   
     case 3: 
    gotol();
    process->state='W';
    process->dd=pc;   
     }  
     }   
    else if((process->name=='c')&&(process->state=='W'))/*执行消费者进程且该进程处于就绪状态*/ 
    
    
    
      
    
    
      {    
    process->state='W'; 
       j=sa[i];   
     pc=i+1;   
     switch(j)  
      {   
     case 0: 
    s2=p(s2);
    process->dd=pc;break;/*申请资源,若没有申请到则跳转*/    
    case 1:
    get();
    process->dd=pc;break; 
       case 2:
     s1=v(s1);
    process->dd=pc;break;  
      case 3: gotol();process->state='W';
    process->dd=pc;   
     }      
    } /*end else*/  
    }/*end while*/  
    printf("
    The program is over!
    "); } 
    void main() 
    {  
    init(); 
     bornpa();  
    bornsa();  
     diaodu(); 
    }

  • 相关阅读:
    找工作就上智联,效果真快,然而让我去的公司都是泡我呢
    只能面深度学习岗和算法岗,其他都不会
    2维矩阵前缀和技巧题目
    计算机基础背诵
    集合函数AVG,SUM,MAX,MIN
    集合函数COUNT
    修改删除数据记录
    多表查询
    查询数据表中的记录
    SQL基本语句(3) LOAD DATA INFILE
  • 原文地址:https://www.cnblogs.com/SunkingYang/p/11049228.html
Copyright © 2011-2022 走看看