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

上传人:牧羊曲112 文档编号:3160749 上传时间:2023-03-11 格式:DOCX 页数:4 大小:37.44KB
返回 下载 相关 举报
Linux系统线程死锁实验报告.docx_第1页
第1页 / 共4页
Linux系统线程死锁实验报告.docx_第2页
第2页 / 共4页
Linux系统线程死锁实验报告.docx_第3页
第3页 / 共4页
Linux系统线程死锁实验报告.docx_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《Linux系统线程死锁实验报告.docx》由会员分享,可在线阅读,更多相关《Linux系统线程死锁实验报告.docx(4页珍藏版)》请在三一办公上搜索。

1、Linux系统线程死锁实验报告 实验四 Linux系统线程死锁实验报告 关键问题:实例可能会发生死锁,要求修改实例,预防死锁发生 设计思路:采用破坏占有且等待条件预防死锁发生!其中采用“空手申请资源策略预防死锁,即每个进程仅在它不占有资源时才可以申请资源。一个进程可能需要申请并使用某些资源,在它申请另外附加资源前必须先释放当前分到的全部资源! 实现的关键代码: #include #include #include #include #define Max 7 pthread_t EMax;/从东方来的汽车。每辆汽车对应一个线程。 pthread_t WMax;/从西方来的汽车 pthread_

2、t SMax;/从南方来的汽车 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 Cn,serialNum); sleep(2); pthr

3、ead_mutex_unlock(&s1); pthread_mutex_lock(&s2); printf(S %d enter Bn,serialNum); sleep(2); pthread_mutex_unlock(&s2); pthread_mutex_lock(&s3); printf(S %d enter An,serialNum); sleep(2); printf(S %d leave An,serialNum); printf(!S finished onen); sleep(2); pthread_mutex_unlock(&s3); void *e(void *a2)

4、/东边来的汽车 int serialNum=*(int*)a2); pthread_mutex_lock(&s2); printf(E %d enter Bn,serialNum); sleep(2); pthread_mutex_unlock(&s2); pthread_mutex_lock(&s3); printf(E %d enter An,serialNum); sleep(2); pthread_mutex_unlock(&s3); pthread_mutex_lock(&s4); printf(E %d enter Dn,serialNum); sleep(2); printf(E

5、 %d leave Dn,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 Dn,serialNum); sleep(2); pthread_mutex_unlock(&s4); pthread_mutex_lock(&s1); printf(W %d enter Cn,serialNum); sleep(

6、2); printf(W %d leave Cn,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_mut

7、ex_init(&s1,NULL); /线程互斥信号量创建及初始化 if(i1 != 0) printf(Create error.); exit(1); int i2 = pthread_mutex_init(&s2,NULL); if(i2 != 0) printf(Create error.); exit(1); int i3 = pthread_mutex_init(&s3,NULL); if(i3 != 0) printf(Create error.); exit(1); int i4 = pthread_mutex_init(&s4,NULL); if(i4 != 0) print

8、f(Create error.); exit(1); for(i = 1;i = c; i+) int* iaddr=&i;/汽车序号 pthread_create(&Wi-1,NULL,(void *)w,(void *)iaddr);/创建线程 pthread_create(&Ei-1,NULL,(void *)e,(void *)iaddr); pthread_create(&Si-1,NULL,(void *)s,(void *)iaddr); sleep(5); for(i = 0; i c; i+) pthread_join(Wi,NULL);/当前线程等待Wi线程终止 pthread_join(Ei,NULL); pthread_join(Si,NULL); exit(0); /main进程结束 程序运行结果: 总结及进一步改善建议: 通过本次实验,我更进一步认识死锁的发生条件和预防死锁发生的方法,线程的种类,和线程创建及管理机制。死锁发生的条件有互斥条件,占有且等待条件,不可抢占条件等。我们只要破坏死锁发生条件之一我们就可以预防死锁的发生!本实验采用破坏占有且等待条件预防死锁发生!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号