操作系统课程设计报告(网络朱正杰)

上传人:206****923 文档编号:37603773 上传时间:2018-04-19 格式:DOC 页数:23 大小:305.50KB
返回 下载 相关 举报
操作系统课程设计报告(网络朱正杰)_第1页
第1页 / 共23页
操作系统课程设计报告(网络朱正杰)_第2页
第2页 / 共23页
操作系统课程设计报告(网络朱正杰)_第3页
第3页 / 共23页
操作系统课程设计报告(网络朱正杰)_第4页
第4页 / 共23页
操作系统课程设计报告(网络朱正杰)_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《操作系统课程设计报告(网络朱正杰)》由会员分享,可在线阅读,更多相关《操作系统课程设计报告(网络朱正杰)(23页珍藏版)》请在金锄头文库上搜索。

1、 操作系统课程设计报告题目: 线程安全型双向链表的实现 专专 业:业: 网络工程网络工程 班班 级:级: 网络网络 121 学学 号:号: 201210314005 姓姓 名:名: 朱正杰朱正杰 上海海事大学信息工程学院2014 年年 12 月月 15 日日1目录1.1.课程设计任务描述与要求课程设计任务描述与要求.1 11.11.1 任务描述任务描述 .1 12.2.系统总体结构描述与主要数据结构说明系统总体结构描述与主要数据结构说明.1 12.12.1 系统总体结构描述系统总体结构描述 .1 12.22.2 主要数据结构说明主要数据结构说明 .2 23.3.课程设计报告内容课程设计报告内容

2、.5 53.13.1 模块功能模块功能 .5 53.23.2 详细流程图详细流程图 .6 63.33.3 实现思路说明实现思路说明 .7 73.43.4 程序清单程序清单 .7 73.53.5 注释注释 .8 84.4.总结总结.1919附录:附录:.1919程序使用说明程序使用说明.1919程序测试思想程序测试思想.2020程序测试结果程序测试结果.2020参考书目:参考书目:.212111.1.课程设计任务描述与要求课程设计任务描述与要求1.1 任务描述编写一个线程安全的双向链表,所谓线程安全,就是该链表能够实现多个线程同时正确的增删改链表结点,也就是能够实现对链表这个临界资源的保护。1.

3、2 任务要求需要实现的函数包括:(1) InitList 函数:初始化一个空的双向链表,并初始化各个用于保护链表的信号量。(2) Insert 函数:向链表指定位置插入一个结点。(3) Erase 函数:删除指定位置的结点。(4) Clear 函数:删除链表中的所有结点。(5) Find 函数:查找链表中是否有指定的元素,若有,返回能够访问该结点的指针;若无,返回 NULL。(6) Print 函数:打印当前链表中的所有元素。完成该链表后,自己编写一个测试程序,生成多个线程同时读写该链表,验证链表执行是否正确,并给出测试报告。2.系统总体结构描述与主要数据结构说明系统总体结构描述与主要数据结构

4、说明2.1 系统总体结构描述系统总体结构设计的任务,是根据系统分析的逻辑模型设计应用软件系统的物理结构。系统物理模型必须符合逻辑模型,能够完成逻辑模型所规定的信息处理功能。这是物理设计的基本要求。系统应具有可修改性,即易读,易于进行查错、改错、可以根据环境的变2化和用户的要求进行各种的改变和改进。系统是否具有可修改性,对于系统开发和维护影响极大。据统计,在系统生命周期中各阶段的应用软件费用及人力投入大体分布如下:系统开发:20%;系统维护:80%。由于程序功能简单,未用数据库辅助存储技术,本程序只供实现对双向链表的插入,删除,查找和打印等功能。2.2 主要数据结构说明宏定义部分:#define

5、 random(x)(rand()%x) /产生随机数#define cr 1 /1 标识为插入#define sc 0 /0 标识为删除volatile int readcount=0; /读者数目const int lsarea=10000; /链表大小随机数const int earea=10000; /元素范围随机数const int sum=100000; /线程运行总次数int th=0; /初始化当前线程总数int th_cz=1; /初始化当前查找线程总数int th_cr=1; /初始化当前插入线程总数int th_sc=1; /初始化当前删除线程总数HANDLE h_Mut

6、ex; /控制读者数量 readcount 的互斥访问量HANDLE mutex; /控制读写互斥,写写互斥的信号量typedef int ElemType; / 定义 ElemType 为 int 类型的别名typedef struct DuLNode *PNode; /结点指针/定义结点结构体typedef struct DuLNodeElemType data; /定义数据域PNode prior; /定义前驱指针PNode next; /定义后继指针DuLNode,*DLN;3/定义双向链表结构体typedef struct DuLinkListDLN head; /定义头结点int

7、Length; /定义链表长度DuLinkList,*DLL;/定义读者传参结构体struct ReadargDLL List; /定义链表ElemType e; /定义查找元素;/定义写者传参结构体struct WriteargDLL List; /定义链表int add; /定义插入或删除的位置ElemType e; /定义插入元素int Flag; /定义传入标示符(cr 执行插入操作,sc 执行删除操作); 线程函数部分:WaitForSingleObject(h_Mutex,-1);/等待互斥量信号WaitForSingleObject(mutex,INFINITE);/等待信号量信

8、号ReleaseMutex(h_Mutex);/释放互斥量信号ReleaseSemaphore(mutex,1,NULL);/释放信号量信号主函数部分:HANDLE hThreadsum;/定义线程句柄unsigned threadIDsum;/定义 sum 个线程h_Mutex=CreateMutex(NULL,FALSE,NULL); /创建互斥量 h_Mutexmutex=CreateSemaphore(NULL,1,1,NULL); /创建信号量 mutexReadarg *RA=new Readarg1;/创建读者传参变量RA0.List=L;/传参变量赋值RA0.e=random(

9、100);/传参变量赋值4Writearg *WA=new Writearg2;/创建写者传参变量WA0.List=L; /传参变量赋值WA0.add=random(lsarea); /传参变量赋值WA0.e=random(earea); /传参变量赋值WA0.Flag=cr; /传参变量赋值WA1.List=L; /传参变量赋值WA1.add=random(lsarea); /传参变量赋值WA1.e=0; /传参变量赋值WA1.Flag=sc; /传参变量赋值hThreadi=(HANDLE)_beginthreadex(NULL,0,ReaderThread,(void*)/创建线程函数W

10、aitForSingleObject(hThreadi,INFINITE);/等待线程执行完毕CloseHandle(hThreadi);/关闭线程句柄CloseHandle(h_Mutex);/关闭互斥量句柄CloseHandle(mutex);/关闭信号量句柄53.课程设计报告内容课程设计报告内容3.1 模块功能此程序包含 6 个模块,分别是初始化兼创建模块,插入模块,删除模块,清空模块,查找模块和打印模块。先是有进程自动初始化并随机产生一个链表,然后创建多个线程,线程同时进行插入结点,删除指定位置结点,查找指定元素及打印链表操作,为清楚区分读和写的操作这里分出了两个线程一个为读者线程一个

11、为写者线程,前者具有查找指定元素功能,后者具有插入和删除兼打印链表功能。对于所有的查找,插入和删除数都是随机产生的,更具有代表性。如下图程序工作原理:开始运行程序初始化并创建链表读者线程查找地址写者线程删除数据清空链表插入数据打印链表图 3.1 程序工作原理图63.2 详细流程图是否还有线程开始显示选择菜单初始化链表创建链表删 除 数 据插 入 数 据查 找 地 址清空控制台信息1 或 2清空链表打印链表结束21是否图 3.2 系统流程图73.3 实现思路说明第一步,构建双向链表的基本属性。包括结点结构体,链表结构体,初始化及创建链表函数,插入函数,删除函数,清空函数,查找函数,打印函数。第二步,创建三个线程分别进行插入、删除和查找操作,主函数内创建完链表后通过传参结构体向线程传递链表参数,在线程内使用互斥量对链表的修改操作进行保护。运行过程中所有变量给定固定初始值,测试多线程同步的正确性。第三步,构建两个线程分别为读者线程(执行查找操作) ,写者

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号