- 1、本文档共15页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
进程同步实验详解
实验一线程同步计科1304班梁玮实验目的通过观察计算机运行时线程的同步执行,进而在实践中加深对线程同步的理解。实验内容本次实验旨在产生一种多线程执行时的矛盾问题,并寻找方法解决这个问题。为了产生矛盾,首先要建立两个操作相同的线程,并且让它们同时访问两个全局变量accnt1和accnt2,每次访问都给accnt1和accnt2分别加上和减去相同的数,最后在将accnt1和accnt2求和,观察两个账户的余额之和将永远是0。线程一旦检测到混乱的发生,便终止循环并打印交易的次数(counter)。实验步骤问题提出——不采取任何措施#include stdio.h#include stdlib.h#include windows.hint accnt1 = 0;int accnt2 = 0;DWORD WINAPI run(LPVOID p){int counter = 0;int tmp1,tmp2,r;int id = (int)p;do{r = rand();tmp1 = accnt1;accnt1 = tmp1 + r; tmp2 = accnt2;accnt2 = tmp2 - r;counter++;}while(accnt1 + accnt2 == 0);printf(线程%u结束,转账次数:%d,accnt1=%d,accnt2=%d\n,id,counter,accnt1,accnt2);return 0;}int main(intargc, char* argv[]){CreateThread(NULL,0,run,(LPVOID)1,0,NULL);CreateThread(NULL,0,run,(LPVOID)2,0,NULL);system(PAUSE);return 0;}我们可以看到实验结果如下图所示(如没有特殊更改,main函数不再写出):在不引入任何的措施时,不同的进程运行之间发成了交叉,一个进程A读取了一新(accnt1)一旧(accnt2,即另一个进程B同时在运行,先于进程A更新accnt1而未尚未更新的数据accnt2)两个数据导致结果发生了混乱,此时数据并没有收到影响,进程A发生错误,而进程B在没有其他进程干扰的情况下继续运行,程序在确保进程B顺利运行的情况下,输出请按任意键继续;亦可能发生在一个进程A刚刚更新完accnt1时,进程B立即对accnt1和accnt2进行了更新,这之后进程A才开始更新accnt2,此时accnt1和accnt2的数据都发生错误混乱,进程A、B也都错误。在这里我们可以看到,accnt1和accnt2作为两个被多个进程同时访问的数据,在没有任何保护存取操作的情况下被多次调用并修改,则可能会产生混乱,下面我们将引入几种方法来解决这种混乱。实验已经显示,并发线程访问共享数据时必须有同步机制的互斥保护。我们首先看一看能否在不使用信号量的情况下,制造出一种“灵巧”的互斥机制,实现对临界区的保护。在开始之前,首先明确一下对这种机制的要求:互斥:如果进程P已经进入临界区,在P退出临界区之前,不允许其他任何进程进入。空闲让进:如果当前没有进程进入临界区,那么当某进程试图进入时,应当允许其进入。有限等待:如果进程P试图进入临界区,但临界区中已经有活动进程,那么P应该等待,但等待时间必须是有限的。问题探索——busy标志#include stdio.h#include stdlib.h#include windows.hint accnt1 = 0;int accnt2 = 0;int volatile busy = 0;DWORD WINAPI run(LPVOID p){int counter = 0;int tmp1,tmp2,r;int id = (int)p;do{while(busy != 0);busy = 1;r = rand();tmp1 = accnt1;accnt1 = tmp1 + r; tmp2 = accnt2;accnt2 = tmp2 - r;counter++;busy = 0;}while(accnt1 + accnt2 == 0);printf(线程%u结束,转账次数:%d,accnt1=%d,accnt2=%d\n,id,counter,accnt1,accnt2);return 0;}上面的代码使用busy 标识当前是否有进程进入临界区。进程进入临界区时设置该标志,退出临界区时清除该标志。实验结果如下:我们可以看到,这种busy标志的方法是错误的,因为在对共用资源的调用修改过程中,我们只是对资源进行的保护并不够完善,另一个进程B一直在等待busy标志的变化,一旦变化,进程立即开始执行,而此时进程
您可能关注的文档
- 运维服务方案详解.docx
- 运营中心混土框架结构浇筑施工方案详解.doc
- 今天上午的分解.ppt
- 建筑材料心得体会分解.doc
- 建筑材料用量及费用分解.doc
- 运营管理各章练习题详解.doc
- 今天是你的生日-中国课件分解.ppt
- 运动的水分子PPT详解.ppt
- 运行值长继电保护相关知识及案例分析(王曲)详解.ppt
- 运行控制部安全整顿监察总结报告详解.docx
- 吉安县公开招聘专职文明实践员笔试备考试题及答案解析.docx
- 2025重庆枫叶国际学校招聘教师笔试备考试题及答案解析.docx
- 游机队电玩自制联网教程-tplink.pdf
- 2025重庆新华出版集团招聘1人笔试模拟试题及答案解析.docx
- 2025宜宾高新丽雅城市产业发展有限公司公开招聘笔试模拟试题及答案解析.docx
- 2025云南保山市龙陵县勐糯镇人民政府招聘合同制专职消防员1人笔试模拟试题及答案解析.docx
- 11.1生活中常见的盐 九年级化学人教版下册.pptx
- 6.1法律保护下的婚姻 高二政治《法律与生活》课件(统编版选择性必修2)(新版).pptx
- 文昌市中小学教师校园招聘29人笔试模拟试题及答案解析.docx
- 10.1.5 常见的酸和碱(第5课时)课件-九年级化学人教版下册.pptx
最近下载
- 2025年低压电工理论试题及答案(1000题).doc
- 2023高考英语3500词汇表精编打印版(复习必背) .pdf VIP
- 【课件】多样的文化+课件-2024-2025学年七年级地理上学期人教版.pptx VIP
- 部分华电电厂名单.docx
- 2024年中级消防维保理论题库.docx
- 2025年Agents与基础应用白皮书(中文版)-谷歌-41页.pdf
- 三年级上册道德与法治期末测试卷及参考答案(完整版).pdf
- 2023-2024学年陕西省西工大附中七年级上学期第一次月考英语试卷(含解析).doc VIP
- 电工考试题库2024下载电工考试模拟100题及答案 精选 .pdf VIP
- 联合出品电影合同.doc
文档评论(0)