操作系统线程同步机制实验报告一、实验名称:线程同步机制二、实验内容及目的:2.1、通过观察共享数据资源但不受控制的两个线程的并发运行输出结果,体会同步机制的必要性和重要性;2.2、利用现有操作系统提供的同步机制编程实现两线程的有序控制;2.3、根据同步机制的 Peterson 软件解决方案编程实现同步机制对于同一问题的解决;2。4、基于程序运行时间长短比较两种同步机制。三、实验步骤:3.1、编程实现不设置任何线程同步机制的多线程银行转账程序,观察输出结果。3。1。1、主要代码(完整代码见附录)://nAccount1 与 nAccount2 为全局变量,也是此线程同步机制里的临界变量.do{nTemp1 = nAccount1;nTemp2 = nAccount2;nRandom = rand();nAccount1 = nTemp1 + nRandom;nAccount2 = nTemp2 - nRandom;nLoop++;} while ((nAccount1 + nAccount2) == 0);3.1.2、输出结果:当没有任何线程同步机制时,程序循环不了多少次便跳了出来,某一次的输出结果如下图: 图一 无线程同步机制时的程序运行结果3.2、编程实现调用系统 Mutex 的多线程银行转账程序,观察输出结果。3。2.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++;} while (nLoop 〈= 1000000); 为了防止程序陷入死循环,在 while 条件里加上了 nloop〈=1000000,当循环执行到第1000001 时将跳出。3.2.2、输出结果:调用 Mutex 时的程序运行结果如图二: 图二 调用 Mutex 时的程序运行结果3.3、编程实现利用 Peterson 算法,实现线程同步的多线程银行转账程序,观察输出结果:3.3.1、主要代码(完整代码见附录):do{flagi = true;turn = j;while(flagj && turn == j);nTemp1 = nAccount1;nTemp2 = nAccount2;nRandom = rand();nAccount1 = nTemp1 + nRandom;nAccount2 = nTemp2 — nRandom;if((nAccount1 + nAccount2) != 0)break;flagi = false;nLoop++;} while (nLoop 〈= 1000000);为了防止程序陷入死循环,在 while 条件里加上了 nloop<=1000000,当循环执行到第1000001 时将跳出。3。3.2、输出结果:使用 Peterson 法...