文档详情

Linux系统线程死锁实验报告.doc

发布:2017-12-16约3.04千字共6页下载文档
文本预览下载声明
实验四 Linux系统线程死锁实验报告 关键问题:实例可能会发生死锁,要求修改实例,预防死锁发生 设计思路:采用破坏占有且等待条件预防死锁发生!其中采用“空手申请资源策略预防死锁,即每个进程仅在它不占有资源时才可以申请资源。一个进程可能需要申请并使用某些资源,在它申请另外附加资源前必须先释放当前分到的全部资源! 实现的关键代码: #includestdio.h #includestdlib.h #includeunistd.h #includesemaphore.h #define Max 7 pthread_t E[Max];//从东方来的汽车。每辆汽车对应一个线程。pthread_t W[Max];//从西方来的汽车pthread_t S[Max];//从南方来的汽车pthread_mutex_t s1;//线程互斥信号量,对应C路段pthread_mutex_t s2; //线程互斥信号量,对应B路段pthread_mutex_t s3; //线程互斥信号量,对应A路段pthread_mutex_t s4; //线程互斥信号量,对应D路段int i; void *s(void *a1) //南边来的汽车的线程执行体{ int serialNum=*((int*)a1);//取当前汽车序号 pthread_mutex_lock(s1); printf(S %d enter C\n,serialNum); sleep(2); pthread_mutex_unlock(s1); pthread_mutex_lock(s2); printf(S %d enter B\n,serialNum); sleep(2); pthread_mutex_unlock(s2); pthread_mutex_lock(s3); printf(S %d enter A\n,serialNum); sleep(2); printf(S %d leave A\n,serialNum); printf(!!!S finished one\n); sleep(2); pthread_mutex_unlock(s3); } void *e(void *a2) //东边来的汽车{ int serialNum=*((int*)a2); pthread_mutex_lock(s2); printf(E %d enter B\n,serialNum); sleep(2); pthread_mutex_unlock(s2); pthread_mutex_lock(s3); printf(E %d enter A\n,serialNum); sleep(2); pthread_mutex_unlock(s3); pthread_mutex_lock(s4); printf(E %d enter D\n,serialNum); sleep(2); printf(E %d leave D\n,serialNum); printf(!!!E finished one \n); sleep(2); pthread_mutex_unlock(s4); } void *w(void *a3) //西边来的汽车{ int serialNum=*((int*)a3); pthread_mutex_lock(s4); printf(W %d enter D\n,serialNum); sleep(2); pthread_mutex_unlock(s4); pthread_mutex_lock(s1); printf(W %d enter C\n,serialNum); sleep(2); printf(W %d leave C\n,serialNum); printf(!!!W finished one \n); sleep(2); pthread_mutex_unlock(s1); } int main(int argc,char *argv[]) { int c; printf(Please input the integer number,less than 7: );//车流量 scanf(%d,c); if( c Max ) { printf(You enter the wrong number,try again.\n); exit(1); } int i1 = pthread_mutex_
显示全部
相似文档