操作系统实验5:同步机制及应用编程实现与比较

code link: 欢迎star

1. 实验目的

探索、理解并掌握操作系统同步机制的设计和实现机理,针对所谓的银行账户转账同步问题,构建基于Peterson 算法的同步解决方案以及基于Windows(或Linux)操作系统同步机制(主要是互斥机制)的解决方案,并进行分析和比较。

2. 实验内容

针对所谓的银行账户转账同步问题,分析、设计和利用C 语言编程实现基于Peterson 算法的同步解决方案,以及基于Windows(或Linux)操作系统同步机制的相应解决方案,并就自编同步机制与操作系统自身同步机制的效率进行比较和分析。

3. 实验要求

同步机制及应用编程实现与比较实验功能设计要求:

  • 银行账户转账同步问题的抽象及未采取同步控制情况下的编程实现;
  • 基于Peterson 算法的银行账户转账同步问题解决方案;
  • 基于 Windows(或 Linux)操作系统同步机制的银行账户转账同步问题解决方案;
  • Peterson 算法同步机制和Windows(或Linux)操作系统同步机制的效率比较。

4. 实验思路

实验共分为三个部分。

  1. 第一部分,不采用同步控制机制,只在主进程申请两个银行账户的线程来实现对比。这里的核心算法参考实验指导书。
  2. 第二部分,采用Peterson算法进行同步。这里参考了ppt上的介绍,需要定义两个账户两个线程函数。同时添加NLoop上限值进行控制。在这部分,利用编号和标志实现线程的互斥。
  3. 第三部分,采用windows系统的互斥信号量进行同步线程。主要运用参考了实验指导上的函数,包括WaitForSingleObject、ReleaseMutex、CreateMutex。这里我们通过对上边两个部分的总结,将交互输出改为1000个循环一次,这样可以在一屏上输出结果,实验验证性好。
    第四部分,在peterson和windows mutex代码中加入了计时部分,还修改了主线程等待机制,使计时更加准确。控制循环变量,令两者可以比较,MAXNLOOP设为10000次。

5. 程序实现

5.1. 相关环境介绍

操作系统:window 10 21H2
开发环境:Clion-2022.2.1-Windows
编译器:mwing-10.0

5.2. 实验第一部分 无同步机制

01:DWORD WINAPI ThreadExecuteZZW(LPVOID lpParameter){
     
02:    int *pID = (int*)lpParameter;  
03:  
04:    int nLoop = 0;  
05:    int nTemp1, nTemp2, nRandom;  
06:    do  
07:    {
     
08:        cout << "thread " << *pID << " is called"<< " nLoop is " << nLoop << endl;  
09:        nRandom = rand();  
10:        nTemp1 = nAccount1;  
11:        nTemp2 = nAccount2;  
12:        nAccount1 = nTemp1 + nRandom;  
13:        nAccount2 = nTemp2 - nRandom;  
14:        ++nLoop;  
15:    } while ((nAccount1 + nAccount2) == 0);  
16:  
17:    return 0;  
<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值