- 1、本文档共25页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
学号:202010311195
“操作系统”课程设计(报告)
题目: 线程安全型双向链表的实现
班 级: 网络202
姓 名: 曹玮琪
指导老师: 毕坤
完成日期: 2022年12月21 日
上海海事大学信息工程学院
2022 年 12 月
PAGE 1
目 录
TOC \o 1-3 \h \z \u 1. 引言 1
1.1动机 1
1.2 要解决的问题 1
2. 系统设计 2
2.1 系统总体框架 2
2.2 系统总体流程 3
2.3 系统功能模块 4
3. 数据结构设计 5
4. 关键技术与系统实现 12
4.1 初始化 12
4.2 线程安全型双向链表的具体实现 13
5. 系统运行结果 18
5.1 运行环境 18
5.2 运行与测试结果 19
5.3 实验结果分析 22
6. 调试和改进 22
7. 心得和结论 23
7.1 结论和体会 23
7.2 进一步改进方向 23
主要参考文献 23
“操作系统”课程设计报告
PAGE 2
引言
链表作为经典的数据结构,在计算机各个领域中都有着广泛的应用,为了满足用户需求,各种计算机软件的开发都需要应用到链表这一数据结构,由于程序运行在操作系统中,为了让程序更好更快更高效的在操作系统中运行,必须引入同步与互斥机制,那么实现一个线程安全性的链表就显得尤为重要,针对该问题,本课程设计将着力设计一个基于c语言和c++实现的线程安全性双向链表,以期用于实践生活中。
1.1动机
在计算机系统内部,经常发生多个线程同时访问一个数据结构的现象;多个线程会同时修改或读取一个数据结构的内容;多个线程同时读写会引入读写冲突问题,这些操作如果不经过特殊处理,很容易导致读写操作无效;基于上述现象,本课程设计的动机就是为了保证读写正确性,让程序运行速度更快,输出结果所需时间更少,为将来的研究者提供参考。
所以,本课程设计旨在设计一个能够保证线程安全的双向链表,在对链表同时进行多次插入删除等操作时,相互之间不会产生冲突,保证程序的正常运行,结果正确。
1.2 要解决的问题
为实现保证线程安全的双向链表,本系统需要实现以下几个功能:
(1)用C、C++设计链表这一数据结构,实现链表的插入、删除、查找、打印等操作,并保证其正确性。
(2)设计一个测试函数实现对定义好的链表数据结构进行健壮性测试,保证链表自身的准确性和稳定性,继而保证对后序实现链表的线程安全测试准确。
(3)利用读者写者模型设计一个测试函数测试多个线程并发执行同时对其链表值修改和读操作时,不会产生冲突和错误。
(4) 实现“读者-写者”模型。插入、删除等影响数据的操作函数是“写者”,查找和打印函数是“读者”。课设要求多个线程并发执行插入、删除、查找等函数,允许多个线程同时执行“查找”操作。
(5) 程序的集成测试是全自动的。因此不允许数据是由用户手动输入。因此采用了生成随机数法使用随机函数产生所需要的数据。
(6)设计一个测试函数测试多个线程并发执行同时对其链表值修改时,不会产生冲突和错误。
2.系统设计
2.1 系统总体框架
以下是关于该课程设计的总体思路:
(1)先构造双向链表的数据结构,然后用随机生成函数随机生成数对构造的数据结构多次进行测试,通过打印链表实现对链表的可视化,更加直观的验证链表是否正确,实现功能函数是否正确,保证之后验证并发操作不会出现问题。
(2) 其次创建两个线程分别对链表多次进行插入节点操作和多次删除插入操作,通过简单的互斥机制实现两个线程的同时启用,相互不会发生冲突,实现互斥模型,主要验证方式是打印要插入节点数,删除节点数,删除失败节点数,和最后链表的节点数来验证其是否实现的互斥同步模型正确。
(3)最后设计一个读者写者模型,让对链表的插入删除操作作为写者,统计节点数量和查找节点作为读者,通过屏幕的输出分析其构造的模型是否正确。
链表的基本操作函数
链表的基本操作函数
统计结点和打印查找操作删除操作插入操作初始化
统计结点和打印
查找操作
删除操作
插入操作
初始化
读者模型
读者模型
写者模型
测试
测试
普通测试
普通测试或安全型测试
图2.1 系统框架图
2.2 系统总体流程
整个系统的测试流程:测试开始后用户根据屏幕显示的选项“1”,“2”输入其中1代表进入普通型链表的多线程测试,2代表用户将进入安全型链表的多线程测试。具体如图2.2所示:
图2.2 系统总体流程图
文档评论(0)