欢迎来到天天文库
浏览记录
ID:25609845
大小:789.22 KB
页数:24页
时间:2018-11-21
《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线程退出}----------------------------------------------------------------------
此文档下载收益归作者所有