ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:311.24KB ,
资源ID:16530184      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/16530184.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(线程同步机制实验报告Word格式文档下载.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

线程同步机制实验报告Word格式文档下载.docx

1、4、实验设计:本实验包含三个基于并发线程的程序,第一个没有同步机制,第二个利用Win32 API中互斥信号量操作函数解决线程并发问题,第三个根据同步机制的Peterson软件解决方案实现线程同步机制并解决线程并发问题。三个程序拥有相同的线程主体:线程主体设计:do nTemp1 = nAccount1; nTemp2 = nAccount2; nRandom = rand(); nAccount1 = nTemp1 + nRandom; nAccount2 = nTemp2 - nRandom; nLoop+; while (nAccount1 + nAccount2)=0);该线程主体是对银

2、行账户间转账操作模拟的模拟,可知,若并发的线程不发生交叉,则依次转账操作后nAccount1 + nAccount2的值永远为0,程序不会跳出循环,如果线程发生交叉,则经过若干次转账操作后,就有可能出现nAccount1 + nAccount2不为0的情况,此时程序跳出循环。本实验的三个程序就是基于此线程主体逐步实现的。同步机制的Peterson软件解决方案5、数据结构设计:程序一:没有同步机制说明:ThreadFunc(HANDLE Thread)为线程函数;nAccount1、aAccount2模拟账户;nLoop记录循环次数;nRandom是产生的随机数模拟转账金额;nTemp1、nTe

3、mp2用于暂存nAccount1、aAccount2;HANDLE Thread2创建两个线程句柄。程序二:利用Win32 API中互斥信号量mutex为互斥信号量;time_start、time_end为线程开始运行和结束的时间;time=time_end- time_start。程序三:同步机制的Peterson软件解决方案flag为长度为2的bool型数组,turn为整型,flag与turn共同实现同步机制的Peterson软件解决方案;nLoop1记录线程0的循环次数;nLoop记录线程1的循环次数。6、算法流程图:7、实验过程结果截图:8、实验结果分析:第一个程序两个线程并发并没有同

4、步机制,所以产生了nAccount1 + nAccount2不为0的情况,程序跳出循环,一个线程结束,但剩余的一个线程自己是无法跳出循环的,所以程序一直在运行;第二个程序利用互斥信号并通过成功资源资源来解决并发带来的混乱;第三个程序通过同步机制的Peterson软件解决方案解决并发带来的混乱;通过结果可知,同步机制的Peterson软件解决方案的效率要高于利用Win32 API中互斥信号量的方法。9、实验总结:实验心得:通过本次实验,我锻炼里自己的编程能力,并对理论知识有了进一步的理解。对线程并发问题有了进一步的体会,并掌握了同步线程的方法,特别是同步机制的Peterson软件解决方案。同时我

5、也体会到,学好这门课程,不光要掌握好理论,更重要的是要多实践,对实验现象多加分析研究,才会融会贯通所学的容。实验评价:本实验按照实验指导书完成了要求的全部容,成功得出了结果。但实验程序也存在一些潜在的漏洞,比如第三个程序在多次执行中会出现总的循环次数不为1000000的情况,有待进一步完善。10、实验程序清单:#include #includestdlib.hiostreamusing namespace std;int nAccount1=0, nAccount2=0; int nLoop=0;int nTemp1,nTemp2,nRandom;DWORD WINAPI ThreadFunc

6、(HANDLE Thread) do printf(循环次数为%dn, nLoop); return 0;int main() HANDLE Thread2; Thread0=CreateThread(NULL,0,ThreadFunc,NULL,0,NULL); Thread1=CreateThread(NULL,0,ThreadFunc,NULL,0,NULL); WaitForMultipleObjects(2,Thread,TRUE,INFINITE); CloseHandle(Thread);#define COUNT 1000000int nAccount1 = 0, nAccou

7、nt2 = 0;int nLoop = 0;int nTemp1, nTemp2, nRandom;HANDLE mutex;DWORD WINAPI ThreadFunc(LPVOID lpParamter) WaitForSingleObject(mutex,INFINITE); do ReleaseMutex(mutex); WaitForSingleObject(mutex,INFINITE); while (nAccount1+nAccount2 = 0 & nLoopCOUNT); ReleaseMutex(mutex);int main() long time; DWORD ti

8、me_start, time_end; time_start = GetTickCount(); mutex = CreateMutex(NULL,FALSE,screen); Thread0 = CreateThread(NULL,0,ThreadFunc,NULL,0,NULL); Thread1 = CreateThread(NULL,0,ThreadFunc,NULL,0,NULL); CloseHandle(mutex); time_end = GetTickCount(); time=time_end-time_start; cout总共用时:timemsendl;int nAcc

9、ount1=0,nAccount2=0;int nLoop1 = 0;int nLoop2 = 0;int nTemp1=0,nTemp2=0,nRandom;bool flag2;int turn;DWORD WINAPI ThreadFunc0(HANDLE Thread) flag0=true; /这三行是模拟互斥信号量申请 turn=1; while(flag1 & turn=1) nLoop1+; flag0=false; /释放资源 flag0=true; turn=1; while(flag1 & while(nAccount1+nAccount2)=0 & (nLoop1+nL

10、oop2)COUNT );1循环次数为:nLoop1 flag0=false;DWORD WINAPI ThreadFunc1(HANDLE Thread) flag1=true; /这三行是模拟互斥信号量申请 turn=0; while(flag0 & turn=0) nTemp1=nAccount1; nTemp2=nAccount2; nLoop2+; flag1=false; /释放资源 flag1=true; /这三行是模拟互斥信号量申请 turn=0; while(flag0 & 2循环次数为:nLoop2 flag1=false; Thread0 = CreateThread(NULL,0,ThreadFunc0,NULL,0,NULL); Thread1 = CreateThread(NULL,0,ThreadFunc1,NULL,0,NULL);总次数:nLoop1+nLoop2

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1