操作系统实验三:用PV操作实现司机售票员进程同步(C语言实现)

阅读: 评论:0

操作系统实验三:用PV操作实现司机售票员进程同步(C语言实现)

操作系统实验三:用PV操作实现司机售票员进程同步(C语言实现)

代码如下:
driver_spy.cpp

#include<stdio.h>
#include<stdlib.h>int S1 = 0, S2 = 1, sum = 0;  
char name[10] = "null";void driver(int s1, int s2, char name[]);
void busman(int s1, int s2, char name[]);
void p(int s, char name[]);
void v(int s, char name[]);
void addrecord();int main(){driver(S1, S2, "driver");busman(S1, S2, "busman");return 0;
}void driver(int s1, int s2, char name[])                              
{  		printf("离站开车n");                      printf("正常行车n");printf("到站停车n"); v(s2, "driver");  //汽车到站,唤醒售票员开车门p(s1, "driver"); //初始S1=0,P(S1)后S1=-1,司机无法启动车辆,需等待售票员执行关门操作(V(S1)),需售票员关好门,唤醒司机,司机才能启动车辆 }
void busman(int s1, int s2, char name[])
{p(s2, "busman");	//售票员打开车门,需S2>0时。初始S2=0,售票员不能打开车门,需等司机执行V(S2)操作,唤醒售票员开门,售票员才能打开车门printf("开车门n");printf("关车门n");v(s1, "busman");	//售票员已关好车门,执行V(S1),唤醒司机启动车辆printf("售票n");		
}void p(int s, char name[]){s = s-1;while(1){if( s >= 0 ){if(name == "driver"){printf("P(S1)操作n收到开车信号n"); break;}if(name == "busman"){printf("P(S2)操作 - 收到开车门信号n"); 				break;}break;}if(s < 0)if(name == "driver"){printf("P(S1)操作 - 司机进程阻塞,等待售票员进程发出开车信号n"); busman(s, S2, "busman");}if(name == "busman"){printf("P(S2)操作 - 收到开车门信号n");driver(S1, s, "driver");}}}
void v(int s, char name[]){s = s+1;while(1){if( s > 0 ){if(name = "driver")printf("V(S2)操作 - 发出开车门信号n"); break;}if(s <= 0) if(name == "busman"){sum++;printf("V(S1)操作 - 发出开车信号n售票n");sum++;if(sum>2)   //执行两次循环 exit(-1);driver(s, S2, "driver");}	}		
}

运行结果如图:

本文发布于:2024-02-03 04:18:54,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170690513448603.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:售票员   进程   司机   操作系统   语言
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23