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

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

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

代码如下:
driver_spy.cpp

#include
#include

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");
			}	
	}		
}

运行结果如图:

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5593547.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存