生产者-消费者问题(三个进程P1、P2、P3互斥使用一个包含N个单元的缓冲区)

本文探讨了如何使用信号量解决P1、P2、P3三个进程之间的同步与互斥问题。通过设置空位信号量empty、奇数信号量odd和偶数信号量even,确保生产者写入数据并按奇偶性通知读者,同时保持互斥访问缓冲区。关键点包括互斥锁mutex的应用和避免读者-写者混淆。

1.问题描述

在这里插入图片描述

2.问题分析

同步问题:
(1)包含N个缓冲区单元,有空位置时才能写,即P1、P2、P3共享缓冲区空位,设置同步信号量empty;
(2)存在奇数时才能读出奇数,P1、P2共享奇数缓冲区,设置同步信号量odd;
(3)存在偶数时才能读出偶数,P1、P3共享偶数缓冲区,设置同步信号量even。
互斥问题:
三个进程彼此之间互斥的访问缓冲区,设置互斥信号量mutex。

3.注意事项

1.不要误认为是读者-写者问题,注意这里P2、P3之间也是互斥的,而读者之间的访问可以同时,这里只是单生产者多消费者问题;
2.对缓冲区的互斥访问使用mutex变量对三个进程进行约束即可,不需要在P2、P3之间单独添加约束变量。

4.伪代码实现

Shared Data:

semaphore mutex=1;//互斥访问共享缓冲区;
semaphore empty=N;//共享缓冲区同步信号量
semaphore odd=0;//奇数缓冲区同步信号量
semaphore even=0;//偶数缓冲区同步信号量

The P1 Process

 	do{
        int num=produce();//生产一个数据num
 
        wait(empty);//消耗掉一个空单元
        wait(mutex);//互斥访问缓冲区;
        
        put(num);//将数据num放入缓冲区
        
        signal(mutex);
        if(num%2!=0)//奇数
            signal(odd);
        else//偶数
            signal(even);
    }while(true);

The P2 Process

  do{
        wait(odd);//有奇数时才能取出奇数
  		wait(mutex);//互斥访问缓冲区
       
        getodd();//取出奇数
        
        signal(mutex);
        signal(empty);//产生一个空单元
      
        countodd();//奇数个数加一
    }while(true);

The P3 Process

  do{
        wait(even);//有偶数时才能取出偶数
        wait(mutex);
        
        geteven();
        
        signal(mutex);
        signal(empty);
      
        counteven();
    }while(true);

5.问题参考

https://blog.youkuaiyun.com/weixin_45385429/article/details/115255883
https://blog.youkuaiyun.com/qq_39328436/article/details/109956241
https://blog.youkuaiyun.com/qq_38900441/article/details/83350728

第一章 操作系统引论 学习本章的目的是使学生建立起 OS的基本概念。要求了解OS的引入和发展, 理解多道程序设计技术,掌握操作系统的功能和特征,了解 分层式结构和微内核结构。 第二章 进程和线程 本章的学习目的是使学生建立起进程的概念。进程OS中最重要的基本概念,本章是全书中最重要的一章。要求 掌握 进程的概念,进程的状态及其转换, 进程控制原语,用 P、V操作解决进程同步问题,了解进程间的通信, 了解线程的概念。 第三章 死锁 掌握死锁的概念和产生的必要条件,掌握死锁的预防和避免方法,了解银行家算法,死锁的检测及恢复。 第四章 调度 本章的学习目的主要是使学生理解和掌握处理机调度基本概念,要求掌握进程调度、作业调度和常见的调度算法,了解三级调度及其之间的联系。 第五章 存储管理 本章的目的是使学生了解各种存储器管理的方式和它们的实现方法。要求掌握地址重定位、虚拟存贮器、动态链接和共享的概念以及实现方法;掌握分区、页式与请求页式、段式与虚拟段式的实现原理和地址变换。了解段页式存储管理技术,虚存中的置换算法。 第六章 文件系统 本章的学习目的是使学生掌握文件系统的基本概念和实现过程。要求掌握文件的逻辑结构、物理组织及对不同类型文件的存取方法,掌握文件目录, 外存空间管理及文件共享方式, 了解文件系统的概念、文件的使用、文件系统的层次模型。 第七章 设备管理 学习本章的目的是使学生了解操作系统处理用户 I/O请求的基本过程。要求 掌握通道、缓冲、设备独立性的概念,掌握 I/O控制方式及设备驱动程序 ,设备分配的数据结构及分配程序,掌握设备分配技术,设备管理程序功能,理解缓冲技术和Spooling系统及磁盘调度算法。 第八章 中断和信号机制 理解中断的概念,了解中断机构的组成及工作机制,理解系统调用的概念,熟悉系统调用的使用方法,了解信号机制。 第九章 网络操作系统 本章的学习目的是使学生了解网络操作系统和 Windows NT。要求理解网络操作系统提供的功能和服务,并了解客户/服务器模式及Windows NT网络命令。 第十章 分布式操作系统 本章的目的是使学生了解分布式操作系统的基本概念和近期发展动态,了解常见的一些分布式系统及其相关的支持技术和实现方案。 第十一章 安全性与保护机制 本章学习的目的是使学生能初步建立起系统安全性的概念。要求掌握数据加密、数字签名和认证的基本概念,了解访问控制技术和防火墙技术。
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值