【此后无良辰】实验5 进程的同步

2024-01-10 01:20

本文主要是介绍【此后无良辰】实验5 进程的同步,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

实验目的

掌握使用信号量编程解决进程/线程同步互斥问题的方法;了解操作系统进程/线程同步的原理。

实验内容与记录

3.2 该实验给出的是单人单缓-单人多缓-多人单缓-多人多缓中的哪一个问题实现?程序通过什么方式实现了生产者比消费者快的同步过程?在这种情况下,为什么生产者在生产了13号产品后还会阻塞?
(1) 单人多缓
(2) 实现方式:
消费者在前十四个每2000ms询问消费一次,后十四个每隔100ms询问消费一次。
在这里插入图片描述

生产者每隔500ms产生。
在这里插入图片描述

因此可以保证在前十四个消费者时,生产者的生产速度大于消费者的消费速度,即实现了生产者比消费者快的同步进度。
(3)阻塞原因:
通过计算可知,当生产者生产了第13号 产品(总共十四个产品)时,消费者消费了4 个产品,此时缓冲池中的 10 个缓冲区均被占用,即产生了阻塞。等消费者从缓冲池中再次消费产品,使得缓冲区产生空时,生产者才会被唤醒并继续生产 13号产品。
3.3 根据调试过程中的学习和思考,绘制ps/semaphore.c文件内PsWaitForSemaphore和PsReleaseSemaphore函数的流程图,并说明其实现原子操作的方法。
PsWaitForSemaphore的代码截图:
在这里插入图片描述

根据代码截图绘制出PsWaitForSemaphore函数的流程图:
在这里插入图片描述

PsReleaseSemaphore代码截图:

在这里插入图片描述

根据代码截图绘制出PsReleaseSemaphore函数的流程图:
在这里插入图片描述

3.4 修改以上两个函数,使其可以支持等待超时唤醒功能和批量释放功能。截图说明修改成功可以完成相应功能,思考并解释这段代码为什么可以实现这样的功能。(后面已给出代码,请自己输入并调试)
(1)使得修改完毕的EOS Kernel项目生成的SDK文件夹覆盖原有的EOS APP项目的SDK文件夹
修改的EOS Kernel:
在这里插入图片描述
在这里插入图片描述

运行调试如图:批量释放
在这里插入图片描述
在这里插入图片描述

(2)修改Producer和Consumer函数以实现超时唤醒
修改代码截图:
在这里插入图片描述
在这里插入图片描述

运行调试如图:超时唤醒 + 批量释放
在这里插入图片描述
在这里插入图片描述

实验思考题

尝试创建多个生产者线程和多个消费者线程进行同步,注意临界资源也会发生变化。输出结果展示不同生产者和消费者的行为,以及临界资源的变化,进行截图。(有阻塞情况、没有阻塞情况)

(1) 定义9个生产者,8个消费者
在这里插入图片描述

(2) 运行结果截图

在这里插入图片描述

望能对诸君有所帮助,切忌直接抄袭(觉得有用记得点赞呀~)

这篇关于【此后无良辰】实验5 进程的同步的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/589077

相关文章

MySQL主从同步延迟问题的全面解决方案

《MySQL主从同步延迟问题的全面解决方案》MySQL主从同步延迟是分布式数据库系统中的常见问题,会导致从库读取到过期数据,影响业务一致性,下面我将深入分析延迟原因并提供多层次的解决方案,需要的朋友可... 目录一、同步延迟原因深度分析1.1 主从复制原理回顾1.2 延迟产生的关键环节二、实时监控与诊断方案

Python如何精准判断某个进程是否在运行

《Python如何精准判断某个进程是否在运行》这篇文章主要为大家详细介绍了Python如何精准判断某个进程是否在运行,本文为大家整理了3种方法并进行了对比,有需要的小伙伴可以跟随小编一起学习一下... 目录一、为什么需要判断进程是否存在二、方法1:用psutil库(推荐)三、方法2:用os.system调用

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Linux中的进程间通信之匿名管道解读

《Linux中的进程间通信之匿名管道解读》:本文主要介绍Linux中的进程间通信之匿名管道解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、基本概念二、管道1、温故知新2、实现方式3、匿名管道(一)管道中的四种情况(二)管道的特性总结一、基本概念我们知道多

Linux进程终止的N种方式详解

《Linux进程终止的N种方式详解》进程终止是操作系统中,进程的一个重要阶段,他标志着进程生命周期的结束,下面小编为大家整理了一些常见的Linux进程终止方式,大家可以根据需求选择... 目录前言一、进程终止的概念二、进程终止的场景三、进程终止的实现3.1 程序退出码3.2 运行完毕结果正常3.3 运行完毕

Windows命令之tasklist命令用法详解(Windows查看进程)

《Windows命令之tasklist命令用法详解(Windows查看进程)》tasklist命令显示本地计算机或远程计算机上当前正在运行的进程列表,命令结合筛选器一起使用,可以按照我们的需求进行过滤... 目录命令帮助1、基本使用2、执行原理2.1、tasklist命令无法使用3、筛选器3.1、根据PID

Linux搭建Mysql主从同步的教程

《Linux搭建Mysql主从同步的教程》:本文主要介绍Linux搭建Mysql主从同步的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux搭建mysql主从同步1.启动mysql服务2.修改Mysql主库配置文件/etc/my.cnf3.重启主库my

linux本机进程间通信之UDS详解

《linux本机进程间通信之UDS详解》文章介绍了Unix域套接字(UDS)的使用方法,这是一种在同一台主机上不同进程间通信的方式,UDS支持三种套接字类型:SOCK_STREAM、SOCK_DGRA... 目录基础概念本机进程间通信socket实现AF_INET数据收发示意图AF_Unix数据收发流程图A

Python中多线程和多进程的基本用法详解

《Python中多线程和多进程的基本用法详解》这篇文章介绍了Python中多线程和多进程的相关知识,包括并发编程的优势,多线程和多进程的概念、适用场景、示例代码,线程池和进程池的使用,以及如何选择合适... 目录引言一、并发编程的主要优势二、python的多线程(Threading)1. 什么是多线程?2.