操作系统--线程并发实验三

2023-05-16

操作系统–线程并发实验三

一、实验目的

线程的运行时并发的,如果互不相干的线程交替运行不会产生问题。但是如果有共享资源、合作关系的线程之间由于交替运行可能产生问题,例如偶尔出现程序的结果不正常。
理解临界区的概念:进程中一段需要访问共享资源的代码
解决办法由 3 种,理解第 3 种方法:利用硬件提供的常见原子指令实现互斥锁来保证临界区的操作属性,该方法实际应用较多。

二、实验内容

  1. 编写程序threadtest4 创建两个线程,测试由于线程的并发导致了结果的不确定性。在这里插入图片描述

  2. 编写程序 threadtest5 创建多个线程模拟多个窗口卖票的问题,测试由于线程的并发导致了错误的结果的输出。
    在这里插入图片描述

三、实验步骤

1.定义全局变量 int i=0,编写两个线程,线程 A 对 i 加 1,加到 10 结束,输出Awins,线程B 对 i 减 1,减到-10 结束,输出 Bwins。
(1) 第 1 步 编写程序threadtest4 创建两个线程测试输出结果是怎样的?
在这里插入图片描述

(2) 第 2 步分析结果:多次运行结果是一样的,先输出 BWins,但是理论分析,线程并发机会均等,A 也应该有先输出的时候。主要原因是CPU 的执行速度太快了。
在这里插入图片描述

(3) 第3 步修改程序,将线程A 循环条件改成>1000000,将线程B 循环条件改成<-1000000,

在这里插入图片描述

(4) 第 4 步分析结果:通过增大循环次数,使得每个线程执行的总时间长,增加并发的可能性。多次运行结果是不一样的,和理论分析是一致的。但是依然没有测试到不正常的结果出现,因为这个概率比较低。
编写程序 threadtest5 创建多个线程模拟多个窗口卖票的问题,测试由于
线程的并发导致了错误的结果的输出。
(1) 第 1 步 编写程序threadtest5 创建多个线程模拟多个窗口卖票的问题,定义全局变量
piao=20,多个线程对 piao 这个变量减 1,输出票号,线程是并发的。
在这里插入图片描述

(2) 第 2 步分析结果:线程是并发的,票号并不是倒序输出的,而是随机的,多次运行输出结果也不一样。这是因为线程是并发的,和理论分析一致。但是并没有观察到不正常的票号出现,主要原因是CPU 的执行速度太快了。
(3) 第 3 步修改线程函数,增加一条代码 sleep(1),增加线程之间并发的可能性。
在这里插入图片描述

(4) 第 4 步再次运行测试观察结果。
在这里插入图片描述

(5) 第 5 步分析结果:不正常的票号出现,这是为什么呢?由于并发,多个线程交替运行,可能在任何代码下中断程序切换成另一个线程。
可能的情况:在剩余最后 1 张票的时候,
线程 1 执行判断剩余票数 1>0,中断切换线程 2,减减,打印输出0,切换线程 2
线程 2 执行判断剩余票数 1>0,中断切换线程 3,减减,打印输出-1,切换线程 3
线程 3 执行判断剩余票数 1>0,中断切换线程 4,减减,打印输出-2,切换线程 4
线程 4 执行判断剩余票数 1>0,中断切换线程 5,减减,打印输出-3
线程 5 执行判断剩余票数 1>0,减减,打印输出 1,切换线程1

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

操作系统--线程并发实验三 的相关文章

  • STM32使用串口空闲中断(IDLE)和 DMA接收一串数据流

    STM32使用串口空闲中断 xff08 IDLE xff09 和 DMA接收不定长数据 方法一 使用宏定义判断IDLE标志位 空闲的定义是总线上在一个字节的时间内没有再接收到数据 xff0c USART IT IDLE空闲中断是检测到有数据
  • 串口通信printf函数重定向

    串口通信printf函数重定向 printf函数重定向在51单片机的串口通讯也使用过 xff0c 但51重写的时putchar函数 xff0c 这次STM32重写的是fputc函数和fgetc函数 xff0c 至于为什么51和STM32重写
  • GPS NMEA数据包解析

    GPS NMEA数据包解析 NMEA 0183是美国国家海洋电子协会为海用电子设备制定的标准格式 它包含了定位时间 xff0c 纬度 xff0c 经度 xff0c 高度 xff0c 定位所用的卫星数 xff0c DOP值 xff0c 差分状
  • CAN通信

    CAN的通信速率按照电调的手册要求的1Mbps配置 xff0c 71 42854142857473ns xff08 9 43 4 43 1 xff09 61 1000ns 61 1us 61 1Mbps CAN总线的一个数据帧中所需要传输的
  • 网络传输:linux下的网络请求和下载(ping wget curl)、端口

    一 下载和网络请求 1 ping命令 可以通过ping命令 xff0c 检查指定的网络服务器是否可连通状态 语法 xff1a ping c num ip或主机名 选项 xff1a c 检查的次数 xff0c 若不使用 c xff0c 将无限
  • python的 ping 网络状态监测方法(含多IP)

    ping 基本概念 ping xff08 Packet Internet Groper xff09 是一种因特网包探索器 xff0c 用于测试网络连接量的程序 Ping是工作在 TCP IP网络体系结构中应用层的一个服务命令 xff0c 主
  • MS5611气压传感器中文资料

    MS5611是新一代高分辨率气压传感器 xff0c 分辨率可达10cm 其内置24位AD转换器 xff0c 支持IIC和SPI通讯协议 xff0c 传输速率可达20MHz 其转换时间可以设置 测量 工作范围 xff1a 10 1200mba
  • STM32学习——串口数据收发

    STM32学习 串口数据收发 61 61 STM32的串口通信 61 61 61 61 HAL库中串口发送的重要函数 61 61 61 61 STM32定时器实训 61 61 STM32的串口通信 异步串行通信 xff1a 通信双方在没有同
  • 赛目科技2023校园招聘火热进行中!(算法/开发等多个岗位)

    点击下方卡片 xff0c 关注 自动驾驶之心 公众号 ADAS巨卷干货 xff0c 即可获取 点击进入 自动驾驶之心 求职交流 技术交流群 一 赛目概况 我们是专注于仿真技术自主创新的技术驱动型公司 xff0c 主要从事 ICV 仿真测 试
  • 多模态运动数据采集系统

    为给研究人员提供更多有效的多模态同步数据集 xff0c 合肥工业大学的程景铭团队设计了一个多模态运动数据采集系统 xff0c 采集了包含全身运动多模态数据集 xff0c 并利用已有算法对数据集进行了评估测试 多模态运动数据采集系统 多模态运
  • 【STM32】 STM32 F4 串口通讯

    概念 串口 xff0c 即串行接口 xff0c 是一种可以将接收来自CPU的并行数据字符转换为连续的串行数据流发送出去 xff0c 同时可将接收的串行数据流转换为并行的数据字符供给CPU的器件 串口通信 xff08 Serial Commu
  • 【安装】安装ros机器人系统和无人机环境配置常见问题总结

    安装ros机器人系统和无人机环境配置常见问题总结 一 安装ROS二 无人机环境配置更多安装 Ubuntu16 04安装ros xff1a http wiki ros org cn kinetic Installation Ubuntu Ub
  • ubuntu18.04搭建python环境

    注意 xff1a 我使用的是虚拟机 xff0c 在操作前请确保虚拟机可以访问到网络 1 安装python3 9 0解释器 xff0c 配置环境变量 2 配置虚拟环境 一 安装python3 9 0 到 opt python39 更新软件源
  • vscode生成的exe文件出现中文乱码的问题

    问题描述 vscode生成的exe文件出现中文乱码的问题 解决方案 xff1a 头文件处添加 xff1a span class token macro property span class token directive hash spa
  • c++进行函数重载时报错:此运算符函数的参数太多C/C++(344)

    问题描述 c 43 43 进行函数重载时报错 xff1a 此运算符函数的参数太多C C 43 43 344 原因分析 xff1a C 43 43 中类内运算符重载时只能有且仅有一个参数 解决方案 xff1a 方案一 xff1a 将重载函数作
  • c++中加入随机种子的方法

    c 43 43 中加入随机种子的方法 提示 xff1a c 43 43 中加入随机种子的方法 解决方案 xff1a span class token macro property span class token directive has
  • STM32 第5讲 MDK下载安装注册及配置

    目录 MDK下载安装注册MDK简介MDK下载MDK安装器件支持包安装注册鸡 MDK配置 MDK下载安装注册 MDK简介 MDK不同版本对比 MDK下载 MDK安装使用 61 MDK软件安装 43 器件支持包安装 MDK软件下载 xff1a
  • STM32 第7讲 STM32F407系列系统架构及映射

    Cortex M内核 amp 芯片 F407系统架构 注 xff1a 64KB CCM 内核耦合存储器 数据 RAM不属于总线矩阵 xff0c 只能存数据 xff0c 不支持DMA xff0c 但访问速度快 总线矩阵 xff1a 总线矩阵用
  • 稳了!理想汽车一季报亮眼,禾赛或成大赢家

    作者 Alan 编辑 激光雷达老炮儿 点击下方卡片 xff0c 关注 自动驾驶之心 公众号 ADAS巨卷干货 xff0c 即可获取 5月10日 xff0c 理想汽车公布2023年第一季度财报 xff0c 季度营收和交付量双双创下历史新高 第
  • STM32 第9讲 STM32CubeMX简介安装和简单使用

    文章目录 STM32CubeMX安装安装JAVA环境安装STM32CubeMX下载关联STM32Cube固件包 新建工程芯片选型配置时钟源时钟树配置GPIO引脚配置Debug选项配置生成工程编写逻辑代码 STM32CubeMX安装 STM3

随机推荐