【此后无良辰】实验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的多线程(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通过命令编程

Linux之进程状态&&进程优先级详解

《Linux之进程状态&&进程优先级详解》文章介绍了操作系统中进程的状态,包括运行状态、阻塞状态和挂起状态,并详细解释了Linux下进程的具体状态及其管理,此外,文章还讨论了进程的优先级、查看和修改进... 目录一、操作系统的进程状态1.1运行状态1.2阻塞状态1.3挂起二、linux下具体的状态三、进程的

python多进程实现数据共享的示例代码

《python多进程实现数据共享的示例代码》本文介绍了Python中多进程实现数据共享的方法,包括使用multiprocessing模块和manager模块这两种方法,具有一定的参考价值,感兴趣的可以... 目录背景进程、进程创建进程间通信 进程间共享数据共享list实践背景 安卓ui自动化框架,使用的是

详谈redis跟数据库的数据同步问题

《详谈redis跟数据库的数据同步问题》文章讨论了在Redis和数据库数据一致性问题上的解决方案,主要比较了先更新Redis缓存再更新数据库和先更新数据库再更新Redis缓存两种方案,文章指出,删除R... 目录一、Redis 数据库数据一致性的解决方案1.1、更新Redis缓存、删除Redis缓存的区别二

C#如何优雅地取消进程的执行之Cancellation详解

《C#如何优雅地取消进程的执行之Cancellation详解》本文介绍了.NET框架中的取消协作模型,包括CancellationToken的使用、取消请求的发送和接收、以及如何处理取消事件... 目录概述与取消线程相关的类型代码举例操作取消vs对象取消监听并响应取消请求轮询监听通过回调注册进行监听使用Wa

Nacos集群数据同步方式

《Nacos集群数据同步方式》文章主要介绍了Nacos集群中服务注册信息的同步机制,涉及到负责节点和非负责节点之间的数据同步过程,以及DistroProtocol协议在同步中的应用... 目录引言负责节点(发起同步)DistroProtocolDistroSyncChangeTask获取同步数据getDis

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M