版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上实验2 线程同步机制一、 实验目的:通过观察共享数据资源但不受控制的两个线程的并发运行输出结果,体会同步机制的必要性和重要性。然后利用现有操作系统提供的同步机制编程实现关于该两个线程的有序控制,同时要求根据同步机制的Peterson软件解决方案尝试自己编程实现同步机制和用于同一问题的解决,并基于程序运行时间长短比较两种同步机制。二、 实验设计I基于给定银行账户间转账操作模拟代码作为线程执行代码,在主线程中创建两个并发线程,编程实现并观察程序运行结果和予以解释说明。II利用Windows互斥信号量操作函数解决上述线程并发问题,并分析、尝试和讨论线程执行体中有关信号量操作
2、函数调用的正确位置。III根据同步机制的Peterson软件解决方案尝试自己编程实现线程同步机制和用于上述线程并发问题的解决,并基于程序运行时间长短将其与基于Windows互斥信号量的线程同步机制的效率展开比较。其间,可规定线程主体代码循环执行次三、 源程序清单和说明1未利用互斥信号量#include <windows.h>#include <stdlib.h>#include <stdio.h>int nAccount1 = 0, nAccount2 = 0;int nLoop = 0;int nTemp1, nTemp2, nRandom;DWORD W
3、INAPI ThreadFunc(HANDLE Thread)donTemp1 = nAccount1;nTemp2 = nAccount2;nRandom = rand();nAccount1 = nTemp1 + nRandom;nAccount2 = nTemp2 - nRandom;nLoop+; while (nAccount1 + nAccount2) = 0);printf("循环次数为%dn", nLoop);return 0;int main() HANDLE Thread2; Thread0 = CreateThread(NULL,0,ThreadFun
4、c,NULL,0,NULL); Thread1 = CreateThread(NULL,0,ThreadFunc,NULL,0,NULL); WaitForMultipleObjects(2,Thread,TRUE,INFINITE); CloseHandle(Thread); return 0;2利用Windows互斥信号量#include <windows.h>#include <stdlib.h>#include <stdio.h>#define COUNT int nAccount1 = 0, nAccount2 = 0;HANDLE mutex;D
5、WORD WINAPI ThreadFunc(HANDLE Thread)int nLoop = 0;int nTemp1, nTemp2, nRandom;WaitForSingleObject(mutex,INFINITE);donTemp1 = nAccount1;nTemp2 = nAccount2;nRandom = rand();nAccount1 = nTemp1 + nRandom;nAccount2 = nTemp2 - nRandom;nLoop+; ReleaseMutex(mutex); WaitForSingleObject(mutex,INFINITE);while
6、 (nAccount1 + nAccount2) = 0&&nLoop < COUNT);ReleaseMutex(mutex);WaitForSingleObject(mutex,INFINITE);printf("循环次数为%dn", nLoop);ReleaseMutex(mutex);return 0;int main() HANDLE Thread2; DWORD start, end; start = GetTickCount(); mutex = CreateMutex(NULL,FALSE,NULL); Thread0 = Create
7、Thread(NULL,0,ThreadFunc,NULL,0,NULL); Thread1 = CreateThread(NULL,0,ThreadFunc,NULL,0,NULL); WaitForMultipleObjects(2,Thread,TRUE,INFINITE); end = GetTickCount(); printf("总共用时%ldn",end-start); CloseHandle(Thread); CloseHandle(mutex); return 0;3同步机制的Peterson#include <windows.h>#inclu
8、de <stdlib.h>#include <stdio.h>#define COUNT int nAccount1 = 0, nAccount2 = 0, flag2, turn;int nLoop = 0;int nTemp1, nTemp2, nRandom;/HANDLE mutex;void request ( int id )int other = 1 - id;flagid = 1;turn = other;while ( flagother = 1 && turn = other );DWORD WINAPI ThreadFunc0(HA
9、NDLE Thread)request(0);donTemp1 = nAccount1;nTemp2 = nAccount2;nRandom = rand();nAccount1 = nTemp1 + nRandom;nAccount2 = nTemp2 - nRandom;nLoop+; flag0 = 0; request(0);while (nAccount1 + nAccount2) = 0 && nLoop < COUNT);flag0 = 0;request(0);flag0 = 0;printf("循环次数为%dn", nLoop);re
10、turn 0;DWORD WINAPI ThreadFunc1(HANDLE Thread)request(1);donTemp1 = nAccount1;nTemp2 = nAccount2;nRandom = rand();nAccount1 = nTemp1 + nRandom;nAccount2 = nTemp2 - nRandom;nLoop+; flag1 = 0; request(1);while (nAccount1 + nAccount2) = 0 && nLoop < COUNT);flag1 = 0;request(1);flag1 = 0;prin
11、tf("循环次数为%dn", nLoop);return 0;int main() HANDLE Thread2; DWORD start, end; start = GetTickCount(); Thread0 = CreateThread(NULL,0,ThreadFunc0,NULL,0,NULL); Thread1 = CreateThread(NULL,0,ThreadFunc1,NULL,0,NULL); WaitForMultipleObjects(2,Thread,TRUE,INFINITE); end = GetTickCount(); printf(&
12、quot;总共用时%ldn",end-start); CloseHandle(Thread); return 0;四、 算法及关键数据结构设计1. 银行账户间转账操作模拟int nAccount1 = 0, nAccount2 = 0; /主线程创建的全局变量int nLoop = 0;int nTemp1, nTemp2, nRandom;donTemp1 = nAccount1;nTemp2 = nAccount2;nRandom = rand();nAccount1 = nTemp1 + nRandom;nAccount2 = nTemp2 - nRandom;nLoop+;
13、while (nAccount1 + nAccount2) = = 0);printf("循环次数为%dn", nLoop);2. 进程互斥算法1¾设置访问编号Var turn: integer :=i;repeat while turn¹i do no_op; 临界区 turn:=j; until false;3. 进程互斥算法2¾设置访问标志Var flagi, flagj: boolean :=false, false;repeat while flagj do no_op; flagi := true; 临界区 flagi := fal
14、se;until false;4. 进程互斥算法3¾设置访问标志Var flagi, flagj: boolean :=false, false;repeat flagi := true; while flagj do no_op; 临界区 flagi := false;until false;5. 进程互斥算法4¾编号+标志Var flagi, flagj: boolean; turn: integer; repeat flagi := true; turn := j; while (flagj and turn=j) do no_op; 临界区 flagi := false;until false;五、 实验过程中间结果屏幕截图实验结果1未利用互斥信号量2利用Windows互斥信号量3同步机制的Peterson结果分析1没有应用互斥信号量对线程进行并发控制,运行会产生错误。2利用Windows互斥信号量后,两存取款线程可并发正确执行。成功转账次。但加大了系统的时间开销。时间效率低。3应用同步机制的Peterson算法后,两线程也可顺利的并发执行,成功转账次,但相对于Wi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 深度解析(2026)《FZT 62032-2016机织毛巾布》:标准解码、质量跃升与产业未来
- 深度解析(2026)《FZT 21004-2021国产细羊毛及其改良毛毛条》
- 深度解析(2026)《FZ 65003-1995特种工业用股线 物理机械性能试验方法》
- 据与智能定义竞争⼒:智能⽹联汽⻋实时数据分析⽅案⽩⽪书
- 2026年唐山市开平区社区工作者招聘考试备考题库及答案解析
- 教科版 (2019)必修 第一册第一章 描述运动的基本概念1 参考系 时间 质点教学设计及反思
- 2026年天津市南开区社区工作者招聘考试参考试题及答案解析
- 八年级信息技术下册 第11课 飞天之梦教学设计
- 期末教学设计中职基础课-职业模块 服务类-人教版-(数学)-51
- 人教版六年级下册数学应用题专项练习(提升版含答案)
- GA/T 2329-2025法庭科学虹膜图像相似度检验技术规范
- 5.1 建立良好的公共秩序 第一课时 课件2025-2026学年统编版道德与法治 五年级下册
- 工业产品生产单位落实质量安全主体责任工作指南
- 人教版初中物理八年级下册全册教学课件
- 2023年10月自考00161财务报表分析(一)试题及答案含评分标准
- 腹壁脓肿的护理查房
- (2023版)小学道德与法治一年级上册电子课本
- 《昆虫记》阅读推荐PPT
- GB/T 13927-2022工业阀门压力试验
- JB-T 10706-2022 机械密封用氟塑料全包覆橡胶O形圈
- GB/T 16886.20-2015医疗器械生物学评价第20部分:医疗器械免疫毒理学试验原则和方法
评论
0/150
提交评论