有一座桥每次只能通过一辆车,桥的两端(称为甲端和乙端)等待过桥的车辆需要遵循以下规则:(1)如果对面没有车辆排队,则有车的一方可以连续通过;(2)如果对面有车辆排队,那么甲、乙两端轮流过桥,直到其中一端的车均已过桥。
用信号量机制实现甲、乙两个方向车辆过桥的同步。
答:用信号量机制实现甲、乙两个方向车辆过桥的同步的伪代码如下所示:
int numJ=0,numY=0;//表示甲、乙两端等待过桥的车辆数semaphore bridge=1;//表示是否过桥,桥是互斥资源 semaphore mutex=1;semaphore crossJ=0,crossY=0;//表示是否允许甲、乙端的车辆过桥甲(){ P(mutex); numJ++; //如果我是甲端的第一辆车且乙端没有车,则不需要过桥许可,可以直接尝试过桥,否则需要申请过桥许可 if(!(numJ==1&&numY==0)){ P(crossJ); } V(mutex); P(bridge);//获取过桥 甲端一辆车过桥; P(mutex); numJ--; V(bridge); if(numY>0){//如果乙端有车,则让乙端车辆先过桥 V(crossY); } else if(numJ>0){//如果乙端没车,甲端有车,则继续让甲端车辆过桥 V(crossJ) } V(mutex); } 乙(){ P(mutex); numY++; if(!(numY==1&&numJ==0)){ P(crossY); } V(mutex); P(bridge); 乙端一辆车过桥; P(mutex); numY--; V(bridge); if(numJ>0){ V(crossJ); } else if(numY>0){ V(crossY); } V(mutex);}
【考点】本题考查1、操作系统--进程管理--同步与互斥--信号量--用信号量实现进程间同步;2、操作系统--进程管理--同步与互斥--信号量--用信号量实现进程间互斥。
扫描微信二维码,添加您的专属老师为好友
您在考试中遇到任何问题,老师都会帮您解答
您希望我们通过哪种方式与您联系?
您已选择电话/微信/QQ的联系方式,课程顾问会尽快联系您!
您已选择微信联系方式,课程顾问会尽快添加您的微信,请您确认通过!
您已选择QQ联系方式,课程顾问会尽快添加您的QQ,请您确认通过!
您已选择电话联系方式,课程顾问会尽快联系您!
您已选择“不联系”,课程顾问不会主动联系您。如果后续您有需求,可以在个人中心主动添加销售微信或拨打客服电话:400-111-9811