操作系统线程同步机制实验报告一、实验名称:线程同步机制二、实验内容及目的:2
1、通过观察共享数据资源但不受控制的两个线程的并发运行输出结果,体会同步机制的必要性和重要性;2
2、利用现有操作系统提供的同步机制编程实现两线程的有序控制;2
3、根据同步机制的 Peterson 软件解决方案编程实现同步机制对于同一问题的解决;2
4、基于程序运行时间长短比较两种同步机制
三、实验步骤:3
1、编程实现不设置任何线程同步机制的多线程银行转账程序,观察输出结果
1、主要代码(完整代码见附录)://nAccount1 与 nAccount2 为全局变量,也是此线程同步机制里的临界变量
do{nTemp1 = nAccount1;nTemp2 = nAccount2;nRandom = rand();nAccount1 = nTemp1 + nRandom;nAccount2 = nTemp2 - nRandom;nLoop++;} while ((nAccount1 + nAccount2) == 0);3
2、输出结果:当没有任何线程同步机制时,程序循环不了多少次便跳了出来,某一次的输出结果如下图: 图一 无线程同步机制时的程序运行结果3
2、编程实现调用系统 Mutex 的多线程银行转账程序,观察输出结果
1、:主要代码(完整代码见附录):do{::WaitForSingleObject(m1,INFINITE);nTemp1 = nAccount1;nTemp2 = nAccount2;nRandom = rand();nAccount1 = nTemp1 + nRandom;nAccount2 = nTemp2 - nRandom;if((nAccount1 + nAccount2)
= 0)break;::ReleaseMutex(m1);nLoop