if(!temp_chct->blockqueue) //阻塞队列为空 {
temp_chct->blockqueue=head; }
else //阻塞队列不为空 {
PCB* t=temp_coct->blockqueue; while(t)
t=t->next; if(!t) {
temp_dct->blockqueue=NULL; } else
t->next=head; } }
else //通道可用 {
temp_chct->use=head;
temp_chct->state=false; //通道状态置忙
cout<<\该设备已经成功申请,请输入下一条指令.\ } } } }
else if(l==2) //删除设备 {
vector
cout<<\现在系统拥有的设备如下:\
for(ator=SDT_table.begin();ator!=SDT_table.end();ator++) {
cout cout<<\请输入想要删除的设备名:\cin>>name; for(ator=SDT_table.begin();ator!=SDT_table.end();ator++) { if(ator->equipmentID==name) //查找到了该设备 { ator1=ator->dct; COCT *temp=ator1->front; ator->dct=NULL; SDT_table.erase(ator); //从设备表中删除 ator=SDT_table.begin(); /* for(ator=SDT_table.begin();ator!=SDT_table.end();ator++) cout if(temp->use) { if(temp->use->equipment==name) //该设备正在占用控制器 { if(!temp->blockqueue) //控制器的等待队列为空 { temp->state=true; temp->use=NULL; } else //控制器的等待队列有内容 { PCB *tt=temp->blockqueue; temp->blockqueue->next=tt->next; temp->use=tt; tt->next=NULL; } } else //该设备没有占用控制器 { temp->blockqueue=NULL; } } ator1->blockqueue=NULL; ator1->front=NULL; ator1->use=NULL; vector for(ator2=DCT_table.begin();ator2!=DCT_table.end();ator2++) { if(ator2!=ator1) D.push_back(*ator2); } DCT_table=D; // ator1=DCT_table.erase(ator1); //删除该设备 break; } } if(ator==SDT_table.end()) //判断是否查找到设备 { cout<<\没有该设备,请重新输入操作指令\ } else { cout<<\成功删除该设备,请输入下一条操作指令。\ } } else if(l==3) //添加设备 { SDT SDT_add; DCT DCT_add; int select; cout<<\输入要添加的设备名称:\cin>>DCT_add.equipmentID; SDT_add.equipmentID=DCT_add.equipmentID; cout<<\输入设备的类型(单个数字或单个字母):\cin>>DCT_add.type; SDT_add.type=DCT_add.type; SDT_add.dct=&DCT_add; DCT_add.blockqueue=NULL; DCT_add.use=NULL; DCT_add.state=true; SDT_table.push_back(SDT_add); DCT_table.push_back(DCT_add); cout<<\是否需要新增控制器: 1.新增 2.使用已存在的\cin>>select; if(select==1) //新增 { COCT c; c.blockqueue=NULL; c.state=true; cout<<\输入控制器的名称(如:控制器1):\cin>>c.controllerID; c.use=NULL; DCT_add.front=&c; cout<<\cout<<\链接到哪个通道:\cin>>select; if(select==1) //链接到两个不同的通道 { c.front=h1; } else { c.front=h2; } cout<<\连接成功.\COCT_table.push_back(c); } else //利用以前的控制器 { for(vector cout cout<<\选择的控制器名是(如:控制器1):\cin>>name; for(ator=COCT_table.begin();ator!=COCT_table.end();ator++) //按名字进行选择 { if(ator->controllerID==name) { DCT_add.front=ator; cout<<\链接成功,请输入下一条指令.\break; } } } } else if(l==4) //释放设备资源 { cout<<\想要释放的设备名:\cin>>name; DCT *DCT_temp; //暂存DCT COCT *COCT_temp; //暂存COCT //输出 CHCT *CHCT_temp; //暂存CHCT for(vector if(SDT_table[i].equipmentID==name) { DCT_temp=SDT_table[i].dct; COCT_temp=DCT_temp->front; CHCT_temp=COCT_temp->front; if(!DCT_temp->use) //如果该设备没有被使用 { cout<<\该设备未被占用,无需释放。\break; } else //设备现在被占用 { if(CHCT_temp->use->ID==name) //该设备目前占用通道时 { if(!CHCT_temp->blockqueue) //通道的等待队列无内容 { CHCT_temp->state=true; CHCT_temp->use=NULL; } else //通道的等待队列不为空 { CHCT_temp->use=CHCT_temp->blockqueue; CHCT_temp->blockqueue=CHCT_temp->blockqueue->next; } } if(COCT_temp->use->ID==name) //设备占用控制器 { if(!COCT_temp->blockqueue) //控制器的等待队列为空 { COCT_temp->use=NULL; COCT_temp->state=true; } else //控制器等待队列有内容 { COCT_temp->use=COCT_temp->blockqueue; COCT_temp->blockqueue=COCT_temp->blockqueue->next; } } if(!DCT_temp->blockqueue) //设备自身的等待队列 { //为空 DCT_temp->state=true; DCT_temp->use=NULL; break; } else //该设备目前被其他进程申请(队列不空) { DCT_temp->use=DCT_temp->blockqueue; DCT_temp->blockqueue=DCT_temp->blockqueue->next; break; } if(!COCT_temp->use) { COCT_temp->use=DCT_temp->use; COCT_temp->state=false; if(!CHCT_temp->use) { CHCT_temp->use=COCT_temp->use; CHCT_temp->state=false; } } } } } if(i==SDT_table.size()) { cout<<\该设备不存在,请重新输入下一条操作指令。\ } else { cout<<\成功释放该设备,请输入下一条指令。\ } } } return 0; }