亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? wros2new.cpp

?? 操作系統相關的東東 操作系統相關的
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// MyOSnew.cpp : Defines the entry point for the console application.
//
//生產者--消費者問題

#include "stdafx.h"



#include <stdio.h>
#include <ctype.h>
#define TRUE 1
#define FALSE 0
#define NIL -1
#define MAX 6
#define Length 3//緩沖池長度
struct tagpcb          /* 進程控制塊的結構 */
 {
  int id;        /* 進程內部標識符 */
  char status;    /* 進程狀態 */
  int priority;   /* 進程初始優先數 */
  int nptr;      /* 進程隊列指針 */
  char save;    /* 斷點保存 */
 }pcb[MAX];
struct tagsem          /* 信號量的結構 */
 {
  int value;    /* 信號量的值 */
  int L;       /* 進程鏈表指針 */
 }sem[2];
int addr,run,m,k[MAX],jj[MAX];
/* addr為當前進程程序的執行地址;run為執行態進程的內部標識符;m為單緩沖區 */
int in,out,buffer[Length];//in是緩沖池輸入指針,out是緩沖池輸出指針,buffer[3]是緩沖池

void init();        /* 初始化模塊 */
int scheduler();
//生產者進程
int processA();
int processB();
int processC();

//消費者進程
int processD();
int processE();
int processF();

void block(int *L);
void wakeup(int *L);

main()
 {
  int k,i,s;
  char n[MAX];
  printf("按優先級從大到小的順序輸入%d個進程的名稱 :\n",MAX);
  goto l1;
  l2:printf("錯誤! 請重新輸入 :\n");
  l1:gets(n);
  for(i=0;i<MAX;i++)
   {if(!(isalpha(n[i])))goto l2;  
    n[i]=(n[i]>='a'&&n[i]<='z')?(n[i]-32):n[i];
   }
  for(i=0;i<MAX;i++)
    switch(n[i])
     {
		case 'A':
		case 'B':
		case 'C': 
		case 'D':
		case 'E':
		case 'F':break;
      default: goto l2;
     }
  for(i=0;i<MAX-1;i++)
    for(k=i+1;k<MAX;k++)
      if(n[i]==n[k])goto l2;
  for(i=0;i<MAX;i++)
   switch(n[i])
    {case 'A':jj[i]=0;break;
     case 'B':jj[i]=1;break;
     case 'C':jj[i]=2;break;
		case 'D':jj[i]=3;break;
		case 'E':jj[i]=4;break;
		case 'F':jj[i]=5;break;
	 
    }
  init();
  for(s=0;s<2;s++)
    printf("s%d.value=%d,s%d.L=NIL\n",s,sem[s].value,s);
  printf("進程A:pcb1:pcb[%d], 進程B:pcb2:pcb[%d], 進程C:pcb3:pcb[%d]\n",pcb[0].id,pcb[1].id,pcb[2].id);
  printf("進程D:pcb4:pcb[%d], 進程E:pcb5:pcb[%d], 進程F:pcb6:pcb[%d]\n",pcb[3].id,pcb[4].id,pcb[5].id);
  printf("各進程優先級: A=%d,B=%d,C=%d,  D=%d,E=%d,F=%d\n",
	 pcb[0].priority,pcb[1].priority,pcb[2].priority,pcb[3].priority,pcb[4].priority,pcb[5].priority);
  for( ; ; )

  {		printf("\n進程運行狀態:A '%c'  B '%c'  C '%c'   ",pcb[0].status,pcb[1].status,pcb[2].status);
  		printf("D '%c'  E '%c'  F '%c'\n",pcb[3].status,pcb[4].status,pcb[5].status);
  	  if(scheduler() != NIL)
		  continue;
	  else
	  {
		printf("\n進程運行狀態:A '%c'  B '%c'  C '%c'   ",pcb[0].status,pcb[1].status,pcb[2].status);
		printf("D '%c'  E '%c'  F '%c'\n",pcb[3].status,pcb[4].status,pcb[5].status);
		break;
	  }
  } //end of for
  
 
  printf("所有進程全部完成,系統停止。\n");
  printf("       * * * * * 結束 * * * * *\n");
  return 0;
 }

void init()
 {
  int j;
  for(j=0;j<MAX;j++)    /* 進程控制塊初始化 */
  {
   pcb[j].id=j;
   pcb[j].status='R';
   pcb[j].nptr=NIL;
   pcb[j].save='F';
  }
  for(j=0;j<MAX;j++)     /* 根據要求設置初始優先數 */
    pcb[jj[j]].priority=j+1;
  sem[0].value=Length;sem[0].L=NIL;    /* 信號量初始化 */
  sem[1].value=0;sem[1].L=NIL;
  k[0]=k[1]=k[2]=4;k[3]=k[4]=k[5]=4;          /* 設置循環次數 */
  //m=0;        
  buffer[0]=buffer[1]=buffer[2]=0; /* 緩沖區清零 */
 }


int wait(int i)
{
//	s->value=s->value-1;
	sem[i].value=sem[i].value-1;
	printf("wait 信號量sem[%d],...sem[%d].value=%d\n",i,i,sem[i].value);
//	printf("s->value=%d\n",s->value);
	if(sem[i].value<0) //wait failed,process will be blocked
	{

		block(&sem[i].L);
		return 1;
	}
	else 
		return 0;//wait succeed
}

	
int signal(int i)//i決定是哪個信號量
{
	//s->value=s->value+1;
	sem[i].value=sem[i].value+1;
	printf("signal 信號量sem[%d],...sem[%d].value=%d\n",i,i,sem[i].value);
	
	if(sem[i].value<=0)//還有阻塞的進程,將他們喚醒
	{
		printf("還有阻塞的進程,將他們喚醒\n");
		wakeup(&sem[i].L);
		return 1;
	}
	else 
	{
		printf("沒有阻塞的進程\n");
		return 0;//沒有阻塞的進程
	}
}


/****************六個進程函數A,B,C,D,E,F********************/

int processA()
{
	int n;
//	n=k[0];//將要輸入到緩沖區m的數暫存在n中

	if(addr=='I') goto i1;//判斷是首次進入還是中斷喚醒后進入

f1:	printf("生產者進程A正在運行...\n");
	
	if(wait(0)==0)//wait succeed
	{
		printf("processA wait succeed\n");
		goto i2;//可以將計算結果送入緩沖區

//		return signal(&sem[1]);//-1還有阻塞的進程
							  //0沒有阻塞的進程
	}
	else//wait failed
	{
		printf("processA wait failed\n");
//		pcb[0].status='B';//進程A阻塞,要保存斷點
		return 1;
	}
i1:
	printf("生產者進程A被喚醒...\n");//中斷喚醒后的入口地址

i2:n=k[0];//將要輸入到緩沖區m的數暫存在n中
	printf("生產者進程A將計算結果送入緩沖區buffer[%d]=%d\n",in,n);
	//m=n;
	
	buffer[in]=n;
	in=(in+1)%Length;
	signal(1);			  //-1還有阻塞的進程
							  //0沒有阻塞的進程
	if(--k[0]==0)
		return 0;//完成標志
	else
	//	goto f1;
	{	
		pcb[0].status='R';//'E'-->'R',進入下一次的優先權比較
		return 2;
	}

}
//--------------------------------------------------	
int processB()
{
	int n;
//	n=2*k[1];//將要輸入到緩沖區m的數暫存在n中

	if(addr=='I') goto i1;//判斷是首次進入還是中斷喚醒后進入

f1:	printf("生產者進程B正在運行...\n");
	
	if(wait(0)==0)//wait succeed
	{
		printf("processB wait succeed\n");
		goto i2;//可以將計算結果送入緩沖區

//		return signal(&sem[1]);//-1還有阻塞的進程
							  //0沒有阻塞的進程
	}
	else//wait failed
	{
		printf("processB wait failed\n");
//		pcb[0].status='B';//進程A阻塞,要保存斷點
		return 1;
	}
i1:
	printf("生產者進程B被喚醒...\n");//中斷喚醒后的入口地址

i2:n=4*k[1];//將要輸入到緩沖區m的數暫存在n中
	printf("生產者進程B將計算結果送入緩沖區buffer[%d]=%d\n",in,n);
	//m=n;
	
	buffer[in]=n;
	in=(in+1)%Length;
	signal(1);			  //-1還有阻塞的進程
							  //0沒有阻塞的進程
	if(--k[1]==0)
		return 0;//完成標志
	else
//		goto f1;
	{
		pcb[1].status='R';
		return 2;
	}

}
//-----------------------------------------------------
int processC()
{
	int n;
//	n=3*k[2];//將要輸入到緩沖區m的數暫存在n中

	if(addr=='I') goto i1;//判斷是首次進入還是中斷喚醒后進入

f1:	printf("生產者進程C正在運行...\n");
	
	if(wait(0)==0)//wait succeed
	{
		printf("processC wait succeed\n");
		goto i2;//可以將計算結果送入緩沖區

//		return signal(&sem[1]);//-1還有阻塞的進程
							  //0沒有阻塞的進程
	}
	else//wait failed
	{
		printf("processC wait failed\n");
//		pcb[0].status='B';//進程A阻塞,要保存斷點
		return 1;
	}
i1:
	printf("生產者進程C被喚醒...\n");//中斷喚醒后的入口地址

i2:	n=5*k[2];//將要輸入到緩沖區m的數暫存在n中
	printf("生產者進程C將計算結果送入緩沖區buffer[%d]=%d\n",in,n);
	//m=n;

	buffer[in]=n;
	in=(in+1)%Length;
	signal(1);			  //-1還有阻塞的進程
							  //0沒有阻塞的進程
	if(--k[2]==0)
		return 0;//完成標志
	else
//		goto f1;
	{
		pcb[2].status='R';
		return 2;
	}

}

//-----------------------------------------------------
int processD()
{
	
	if(addr=='I') goto i1;//判斷是首次進入還是中斷喚醒后進入
f1:	//k[2]--;//首次進入
	printf("消費者進程D正在運行...\n");
	if(wait(1)==0)//wait succeed
	{
		printf("processD wait succeed:%d\n",sem[1].value);
		goto i2;
		
	
	//	return signal(&sem[0]);//-1還有阻塞的進程
							  //0沒有阻塞的進程
	}
	else//wait failed
	{
		printf("processD wait failed\n");
	//	pcb[2].status='B';//進程C阻塞,要保存斷點
		return 1;
	}
i1:
	printf("消費者進程D被喚醒...\n");//中斷喚醒后的入口地址
i2:
	printf("消費者進程D將打印計算結果: ");
//	printf("m=%d\n",m);
	printf("buffer[%d]=%d\n",out,buffer[out]);
	out=(out+1)%Length;
	signal(0);   //-1還有阻塞的進程
							  //0沒有阻塞的進程
	if(--k[3]==0)
		return 0;
	else
//		goto f1;
	{
		pcb[3].status='R';
		return 2;
	}

}
//------------------------------------------------------
int processE()
{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩五月天| 一区二区三区精品| 91在线你懂得| 黄色精品一二区| 亚洲国产美女搞黄色| 日本一区二区视频在线观看| 欧美一区二区网站| 在线观看免费视频综合| 国产不卡视频在线观看| 人禽交欧美网站| 亚洲图片欧美视频| 中文字幕一区二区三中文字幕| 日韩一区二区三区电影在线观看| 色婷婷国产精品久久包臀| 国产精品亚洲专一区二区三区| 日韩国产精品久久久久久亚洲| 亚洲伦理在线免费看| 日本一区二区三区四区| 久久久精品国产免大香伊| 日韩一二三区不卡| 欧美一级久久久久久久大片| 欧美日韩aaa| 欧美亚洲国产bt| 91麻豆免费看片| aa级大片欧美| 波多野结衣亚洲一区| 国产精品一区二区在线看| 久久99国产精品久久99| 免费观看日韩av| 日日摸夜夜添夜夜添亚洲女人| 亚洲一区视频在线| 一区二区三区在线视频播放| 亚洲三级免费电影| 亚洲日本在线a| 一区二区三区在线视频观看58 | 亚洲欧美日韩在线| 日韩欧美一二三| 3751色影院一区二区三区| 欧美亚洲国产bt| 欧美老人xxxx18| 777色狠狠一区二区三区| 欧美精品久久天天躁| 91精品国产色综合久久不卡电影| 欧美精品在线观看播放| 7777精品伊人久久久大香线蕉最新版| 欧美日韩你懂的| 日韩一级视频免费观看在线| 欧美成人乱码一区二区三区| 精品乱码亚洲一区二区不卡| 精品国产免费人成在线观看| 久久精品亚洲乱码伦伦中文| 中文字幕欧美日韩一区| 亚洲免费毛片网站| 亚洲一二三四在线| 免费国产亚洲视频| 国产成人在线观看| www.爱久久.com| 欧美日韩视频一区二区| 国产精品一区二区在线看| 国产91在线观看丝袜| 国产乱子轮精品视频| 国产精品 欧美精品| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 亚洲欧美另类小说| 亚洲一区二区3| 免费人成黄页网站在线一区二区| 精品亚洲国产成人av制服丝袜| 国产成人综合视频| 一本到不卡免费一区二区| 欧美日韩国产精品自在自线| 精品国产自在久精品国产| 国产精品毛片久久久久久久| 亚洲国产综合视频在线观看| 美女在线视频一区| 成人丝袜高跟foot| 欧美日韩午夜精品| 精品国产乱子伦一区| 欧美日韩高清一区二区不卡| 久久综合久久久久88| 久久久国产精品不卡| 一区二区中文视频| 男人的天堂亚洲一区| 成人av小说网| 欧美一级黄色录像| 中文字幕一区日韩精品欧美| 日韩不卡免费视频| 成人av在线资源网| 日韩欧美一区二区免费| ●精品国产综合乱码久久久久| 日韩电影在线一区| a亚洲天堂av| 日韩免费视频线观看| 亚洲久本草在线中文字幕| 麻豆91在线观看| 欧美色区777第一页| 中文字幕第一页久久| 久久精品国产第一区二区三区| 91丨porny丨户外露出| 日韩精品一区二区三区在线播放 | 国产精品国产a| 日韩不卡免费视频| 91搞黄在线观看| 亚洲精品一区二区三区香蕉| 亚洲日本一区二区三区| 久久成人av少妇免费| 欧美三级日本三级少妇99| 国产精品无人区| 国产一区二区福利视频| 91精品国产一区二区| 一区二区三区四区激情| 丁香五精品蜜臀久久久久99网站| 欧美美女视频在线观看| 亚洲精品ww久久久久久p站| 粉嫩欧美一区二区三区高清影视| 91麻豆精品国产91久久久久久| 一色屋精品亚洲香蕉网站| 国产一区二区不卡老阿姨| 制服丝袜成人动漫| 亚洲色图制服诱惑| 国产成人自拍在线| 国产亚洲欧洲一区高清在线观看| 日韩精品视频网| 日本道色综合久久| 中文字幕一区二区三区精华液| 国产大陆精品国产| 久久精品夜夜夜夜久久| 日韩国产欧美三级| 欧美日韩色综合| 午夜欧美视频在线观看| 欧美日韩国产一区| 亚洲一区在线看| 日本韩国欧美国产| 亚洲影视资源网| 欧美少妇一区二区| 亚洲一区二区三区自拍| 欧美午夜精品久久久久久孕妇 | 老汉av免费一区二区三区| 91精品国产一区二区三区| 午夜精品免费在线| 欧美色图12p| 亚洲v中文字幕| 在线91免费看| 日日夜夜免费精品| 欧美欧美欧美欧美| 日韩福利视频导航| 欧美一区二区三区在| 日本亚洲一区二区| 精品国产乱码久久久久久久| 国产精品一二三四五| 国产精品国产三级国产| 99久久综合国产精品| 亚洲精品欧美激情| 欧美狂野另类xxxxoooo| 日本aⅴ免费视频一区二区三区| 日韩一级欧美一级| 国产制服丝袜一区| 最近日韩中文字幕| 欧美精选一区二区| 美女视频一区二区| 国产精品美女久久久久av爽李琼| 99久久精品久久久久久清纯| 亚洲图片欧美综合| 久久久蜜臀国产一区二区| 99re这里都是精品| 日韩精品五月天| 国产欧美一区二区三区网站 | 国产乱人伦精品一区二区在线观看| 国产欧美视频一区二区三区| 91在线视频网址| 免播放器亚洲一区| 国产精品理论在线观看| 欧美在线高清视频| 极品少妇一区二区三区精品视频| 中文字幕一区三区| 日韩欧美国产wwwww| 色综合天天综合网国产成人综合天 | 欧美一区二区三区喷汁尤物| 国产福利精品导航| 午夜婷婷国产麻豆精品| 国产亚洲精品bt天堂精选| 欧美在线不卡视频| 国产成人午夜精品影院观看视频| 亚洲综合久久久| 日本一区二区久久| 8x8x8国产精品| 97久久久精品综合88久久| 青草av.久久免费一区| 亚洲毛片av在线| 国产欧美日韩中文久久| 91精品国产综合久久精品| 波多野结衣的一区二区三区| 久久精品免费观看| 一区二区在线看| 国产女人aaa级久久久级| 欧美狂野另类xxxxoooo| 色综合久久久久综合99| 国产福利一区在线观看| 看电影不卡的网站| 亚洲国产精品人人做人人爽| 亚洲欧洲www|