unix操作系统实验6

unix操作系统实验6

ID:25609845

大小:789.22 KB

页数:24页

时间:2018-11-21

unix操作系统实验6_第1页
unix操作系统实验6_第2页
unix操作系统实验6_第3页
unix操作系统实验6_第4页
unix操作系统实验6_第5页
资源描述:

《unix操作系统实验6》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、UNIX操作系统实验首都师范大学信息工程学院系统分析与管理实验室20UNIX操作系统实验首都师范大学信息工程学院系统分析与管理实验室20目录19223346491、UNIX安装及基本操作………………………………………2、UNIX编程基础……………………………………….3、UNIX进程实验……………………………………….4、UNIX进程间通信……………………………………..5、UNIX文件系统实验………………………………………..6、UNIX综合实验………………………………………..20实验六综合实验(多线程与死锁)一、背景知

2、识操作系统中的一个进程在同一时刻只能做一件事情,有了多个控制线程之后,在程序设计时可以把进程设计成在同一时刻能够做不止一件事,每个线程处理各自独立的任务,而且多个线程之间可以实现数据的共享,这种方法有很多好处。但是共享数据必须保持一致性,因此我们通过对互斥量加锁,确保同一时间只有一个线程操作共享数据。这个势必带来一个问题,对互斥量操作不当的话,就会引起死锁。研究死锁的情况,可以让我们在以后的程序中更好地避免死锁问题。在Linux环境中,我们通过有目的地设计死锁程序,观察多线程死锁的情况,分析多线程对互斥量操作的要点,从而在以

3、后的程序中尽可能地避免死锁的发生。二、实验内容1、单线程与多线程对互斥量操作如果线程对同一个互斥量加锁两次,那么这个线程自身就会陷入死锁状态。在Linux环境下,通过设计两个实验来分析这种情况。单线程程序,main线程对互斥量进行两次加锁,查看程序运行情况。图1两次加锁情况参考程序:------------------------------------------------------------------------------------------------thread1.c--------------#inc

4、lude#include#include#includestructfoo{//定义structfoointf_count;pthread_mutex_tf_lock;};structfoo*fp;//定义全局变量fpstructfoo*//结构体fp初始化foo_alloc(void){20structfoo*fp;if((fp=(foo*)malloc(sizeof(structfoo)))!=NULL){//初始化fpfp->f_count

5、=0;if(pthread_mutex_init(&fp->f_lock,NULL)!=0){//初始化互斥锁free(fp);return(NULL);}}return(fp);}intmain(void){//main线程fp=foo_alloc();printf("initfp,fp->f_count:%d",fp->f_count);/***firstlock****/printf("firstlock:");if(pthread_mutex_lock(&fp->f_lock)==0){//第一次对互斥量fp->

6、f_lock加锁printf("locksuccess!");//加锁成功,返回值为0,其它任何情况都表示加锁不成功fp->f_count++;//对结构体fp中的值进行修改fp->f_count++;printf("firstlock,fp->f_count:%d",fp->f_count);}elseprintf("lockwrong!");//pthread_mutex_unlock(&fp->f_lock);//解除第一次的锁(选择打开)/***lockagain****/printf("secondlo

7、ck:");//第二次对互斥量进行加锁if(pthread_mutex_lock(&fp->f_lock)==0){printf("lockagainsuccess!");fp->f_count++;fp->f_count++;printf("secondlock,fp->f_count:%d",fp->f_count);}elseprintf("lockagainwrong!");//在main线程中只对互斥量进行加锁,未解锁pthread_mutex_destroy(&fp->f_lock);//销毁互斥锁,

8、并释放fpfree(fp);printf("mainthreadexit!");//输出main线程退出提示exit(0);//main线程退出}----------------------------------------------------------------------

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。