文档介绍:精选优质文档-----倾情为你奉上
精选优质文档-----倾情为你奉上
专心---专注---专业
专心---专注---专业
精选优质文档-----倾情为你奉上
专心---专注---专业
线程同步机制
你奉上
专心---专注---专业
专心---专注---专业
精选优质文档-----倾情为你奉上
专心---专注---专业
程序二:利用Win32 API中互斥信号量
精选优质文档-----倾情为你奉上
精选优质文档-----倾情为你奉上
专心---专注---专业
专心---专注---专业
精选优质文档-----倾情为你奉上
专心---专注---专业
程序三:同步机制的Peterson软件解决方案
精选优质文档-----倾情为你奉上
精选优质文档-----倾情为你奉上
专心---专注---专业
专心---专注---专业
精选优质文档-----倾情为你奉上
专心---专注---专业
实验过程结果截图:
程序一:没有同步机制
精选优质文档-----倾情为你奉上
精选优质文档-----倾情为你奉上
专心---专注---专业
专心---专注---专业
精选优质文档-----倾情为你奉上
专心---专注---专业
程序二:利用Win32 API中互斥信号量
程序三:同步机制的Peterson软件解决方案
实验结果分析:
第一个程序两个线程并发并没有同步机制,所以产生了nAccount1 + nAccount2不为0的情况,程序跳出循环,一个线程结束,但剩余的一个线程自己是无法跳出循环的,所以程序一直在运行;第二个程序利用互斥信号并通过成功资源资源来解决并发带来的混乱;第三个程序通过同步机制的Peterson软件解决方案解决并发带来的混乱;通过结果可知,同步机制的Peterson软件解决方案的效率要高于利用Win32 API中互斥信号量的方法。
精选优质文档-----倾情为你奉上
精选优质文档-----倾情为你奉上
专心---专注---专业
专心---专注---专业
精选优质文档-----倾情为你奉上
专心---专注---专业
实验总结:
实验心得:通过本次实验,我锻炼里自己的编程能力,并对理论知识有了进一步的理解。对线程并发问题有了进一步的体会,并掌握了同步线程的方法,特别是同步机制的Peterson软件解决方案。同时我也体会到,学好这门课程,不光要掌握好理论,更重要的是要多实践,对实验现象多加分析研究,才会融会贯通所学的内容。
实验评价:本实验按照实验指导书完成了要求的全部内容,成功得出了结果。但实验程序也存在一些潜在的漏洞,比如第三个程序在多次执行中会出现总的循环次数不为的情况,有待进一步完善。
实验程序清单:
程序一:没有同步机制
#include <>
#include<>
#include<>
#include<iostream>
using namespace std;
int nAccount1=0, nAccount2=0;
int nLoop=0;
int nTemp1,nTemp2,nRandom;
DWORD WINAPI ThreadFunc(HANDLE Thread)
{
do{
nTemp1 = nAccount1;
nTemp2 = nAccount2;
nRandom = rand();
nAccount1 = nTemp1 + nRandom;
nAccount2 = nTemp2 - nRandom;
nLoop++;
} while ((nAccount1 + nAccount2)==0);
printf("循环次数为%d\n", nLoop);
return 0;
}
int main()
{
HANDLE Thread[2];
Thread[0]=CreateThread(NULL,0,ThreadFunc,NULL,0,NULL);
Thread[1]=CreateThread(NULL,0,ThreadFunc,NULL,0,NULL);
WaitForMultipleObjects(2,Thread,TRUE,INFINITE);
CloseHandle(Thread);
精选优质文档-----倾情为你奉上
精选优质文档-----倾情为你奉上
专心---专注---专业
专心---专注---专业
精选优质文档-----倾情为你奉上
专心---专