【此后无良辰】实验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

相关文章

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.

Java中将异步调用转为同步的五种实现方法

《Java中将异步调用转为同步的五种实现方法》本文介绍了将异步调用转为同步阻塞模式的五种方法:wait/notify、ReentrantLock+Condition、Future、CountDownL... 目录异步与同步的核心区别方法一:使用wait/notify + synchronized代码示例关键

linux进程D状态的解决思路分享

《linux进程D状态的解决思路分享》在Linux系统中,进程在内核模式下等待I/O完成时会进入不间断睡眠状态(D状态),这种状态下,进程无法通过普通方式被杀死,本文通过实验模拟了这种状态,并分析了如... 目录1. 问题描述2. 问题分析3. 实验模拟3.1 使用losetup创建一个卷作为pv的磁盘3.

Linux环境变量&&进程地址空间详解

《Linux环境变量&&进程地址空间详解》本文介绍了Linux环境变量、命令行参数、进程地址空间以及Linux内核进程调度队列的相关知识,环境变量是系统运行环境的参数,命令行参数用于传递给程序的参数,... 目录一、初步认识环境变量1.1常见的环境变量1.2环境变量的基本概念二、命令行参数2.1通过命令编程