操作系统课程设计报告--线程互斥的演示

操作系统课程设计报告--线程互斥的演示

ID:35618121

大小:237.50 KB

页数:12页

时间:2019-04-02

操作系统课程设计报告--线程互斥的演示_第1页
操作系统课程设计报告--线程互斥的演示_第2页
操作系统课程设计报告--线程互斥的演示_第3页
操作系统课程设计报告--线程互斥的演示_第4页
操作系统课程设计报告--线程互斥的演示_第5页
资源描述:

《操作系统课程设计报告--线程互斥的演示》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、闽江学院课程设计说明书题目:线程互斥的演示院系:闽江学院计算机科学系专业班级:08计本2班学号:120081101206120081101220120081101229120081101240120081101245学生姓名:林超、张嘉、蔡淅荣戴艺君、丘富铨指导教师:张小进老师2011年01月06日需求分析要求:在WindowsXP下调用WinAPI函数,编写一个C++程序实现:创建一个10个节点的单向链表,每个节点包含一个next指针域和一个num域(整型);再创建两个线程,在第一个线程中摘除前5个节点并正向输出链表后5个节点的num域,在第二个线程中逆向输

2、出链表的num域;要求对链表的操作必须是互斥执行,并能演示在非互斥时出错的现象。具体需求:1、创建一条含有十个节点的链表,链表包含指针域跟数据域2、创建两个线程,使两个线程并发执行。3、第一个线程正向删除链表前五个节点4、第二个线程反向输出节点内容,直到输出链表的头5、创建互斥信号量,以保证两个线程对链表的操作正常执行6、能够演示非互斥情况下两个线程对链表操作出现的错误情况7、无测试数据概要设计说明本程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的(调用)关系。HANDLEmutex两个线程的互斥信号量boolt1,t2;用来标识两个线程是

3、否结束,false结束boolsafe=true;用来标识是否采用互斥手段,true为互斥,false为非互斥typedefstructLink{char*buf;Link*prev;Link*next;boolisDelete;}Link;链表节点的定义Link*head,*tail;链表的头尾指针voidp(HANDLE&singleMutex)p操作,用于获取信号量voidv(HANDLE&singleMutex)v操作,用于释放信号量voidinitLink()初始化链表的十个节点voiddeleteNode(Link*link)从链表中删除节点DWO

4、RDWINAPIthread1(void*data)线程1,用来删除节点DWORDWINAPIthread2(void*data)线程2,用来输出节点详细设计根据概要设计中定义的所有数据类型,每个操作算法如下;#include#include#include#includeusingnamespacestd;HANDLEmutex=CreateMutex(NULL,false,NULL);//两个线程的互斥信号量boolsafe=false;boolt1,t2;//用来标识两个

5、线程是否结束,false结束boolsafe=true;//用来标识是否采用互斥手段,true为互斥,false为非互斥typedefstructLink{char*buf;Link*prev;Link*next;boolisDelete;}Link;//链表节点的定义Link*head,*tail;//链表的头尾指针voidp(HANDLE&singleMutex)//p操作,用于获取信号量{::WaitForSingleObject(singleMutex,INFINITE);}voidv(HANDLE&singleMutex)//v操作,用于释放信号量{

6、ReleaseMutex(singleMutex);}voidinitLink()//初始化链表的十个节点{Link*link,*temp;head=link=newLink;head->prev=head->next=NULL;head->buf=newchar[80];sprintf(head->buf,"%d",0);for(inti=1;i<10;i++){temp=newLink;temp->buf=newchar[80];//申请内存sprintf(temp->buf,"%d",i);//给节点赋值temp->isDelete=false;temp

7、->prev=link;link->next=temp;temp->next=NULL;link=link->next;tail=temp;}}voiddeleteNode(Link*link)//从链表中删除节点{Link*temp=link;if(link==NULL)return;if(link==head){deletehead->buf;head->buf=NULL;head->isDelete=true;//把删除标识置为trueSleep(1);head->next->prev=head->prev;head=head->next;link=he

8、ad;return;}}DWORDWI

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

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

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