操作系统线程同步机制实验报告 一、实验名称:线程同步机制 二、实验内容及目的: 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)