欢迎来到天天文库
浏览记录
ID:14715785
大小:78.33 KB
页数:6页
时间:2018-07-30
《车辆行驶死锁问题的教学实验》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、车辆行驶死锁问题实验目的(1)理解死锁产生的原因,掌握预防和预防死锁的方法,以及死锁的检测方法。(2)通过车辆行驶死锁问题的设计与实现掌握解决死锁的方法。实验内容车辆行驶死锁问题,在Linux下用C语言完成下面模型:设有一个T型路口,其中A,B,C,D各处可容纳一辆车,车型方向如图所示。找出死锁并用有序分配法消除之,要求资源编号合理。ABE:左转W:直行DCS:左转T型路口模拟图根据上述介绍,编写车辆行驶死锁问题的程序,要求如下:(1)在Linux下用C语言编程,利用信号量操作实现进程同步;(2)假设3个方向的车辆数目相等,数只有用户输入,并动态显示车
2、辆行驶的状态,每个车辆行驶所用的时间可以预先设定。准备知识(1)了解进程死锁的原理。(2)掌握自然有序分配法。实验原理死锁是指在一组进程中的各个进程占有不会释放的资源,但因互相申请被其他进程所占用不会释放的资源而处于一种永久等待的状态。死锁的4个必要条件:(1)互斥条件。(2)请求与保持条件。(3)非剥夺条件。(1)循环等待条件。死锁预防的基本思想是对进程在申请有关申请资源的时候规定某种策略,如果所有进程都遵守这一策略,则系统就不会进入死锁状态。本实验主要使用资源有序分配策略来预防死锁。实验指导死锁的可能性有两种:(1)E方向两辆车分别位于A和B,S方
3、向一辆车位于C,W方向一辆车位于D。(2)S方向两辆车分别位于B和C,E方向一辆车位于A,W方向一辆车位于D。位置资源编号:f(C)=1,f(B)=2,f(A)=3,f(D)=4.管理C,B,A,D四个位置的信号量分别为s1,s2,s3,s4,初始值均为1。控制的PV源于,如表所示。利用PV源于解决死锁算法Semaphores1=1,s2=1,s3=1,s4=1;VoidS(){P(s1);驶入C;P(s2);驶入B;V(s1);P(s3);驶入A;V(s2);驶出A;V(s3);}VoidE(){P(s2);驶入B;P(s3);驶入A;V(s2);P
4、(s4);驶入D;V(s3);驶出D;V(s4);}VoidW(){P(s1);//按序申请P(s4);驶入D;驶入C;V(s4);驶出C;V(s1);}本实验的程序流程图,如图所示。结束动态显示车辆行驶情况创建三个方向上的线程提示输入错误输入是否大于Max开始实验截图附录:参考源代码程序源代码:#include#include#include#include//死锁#defineMax5//车辆最大数目pthread_tE[Max];//E方向的线程pthread_t
5、W[Max];//W方向的线程pthread_tS[Max];//S方向的线程pthread_mutex_ts1;//C处的互斥信号pthread_mutex_ts2;//B处的互斥信号pthread_mutex_ts3;//A处的互斥信号pthread_mutex_ts4;//D处的互斥信号inti;//用于方便动态显示行驶信息的void*s(void*a1)//S方向{pthread_mutex_lock(&s1);//相当于PV原语中的P操作printf("S%denterC",i+1);sleep(2);//方便观察pthread_mute
6、x_lock(&s2);printf("S%denterB",i+1);sleep(2);pthread_mutex_unlock(&s1);//相当于PV原语中的V操作pthread_mutex_lock(&s3);printf("S%denterA",i+1);sleep(2);pthread_mutex_unlock(&s2);printf("S%dleaveA",i+1);printf("!!!Sfinishedone");//一辆S方向上的车已经通过sleep(2);pthread_mutex_unlock(&s3);}voi
7、d*e(void*a2)//E方向{pthread_mutex_lock(&s2);printf("E%denterB",i+1);sleep(2);pthread_mutex_lock(&s3);printf("E%denterA",i+1);sleep(2);pthread_mutex_unlock(&s2);pthread_mutex_lock(&s4);printf("E%denterD",i+1);sleep(2);pthread_mutex_unlock(&s3);printf("E%dleaveD",i+1);printf
8、("!!!Efinishedone");sleep(2);pthread_mutex_un
此文档下载收益归作者所有