进程同步经典案例 --- 生产者和消费者问题_信号量

 

  • 问题描述

进程同步经典案例 --- 生产者和消费者问题_临界区_02

进程同步经典案例 --- 生产者和消费者问题_临界资源_03

进程同步经典案例 --- 生产者和消费者问题_问题分析_04

 

  • 问题分析

进程同步经典案例 --- 生产者和消费者问题_临界区_05

进程同步经典案例 --- 生产者和消费者问题_互斥_06

进程同步经典案例 --- 生产者和消费者问题_信号量_07

 

  • 如何实现

生产者进程在把产品放入缓冲区之前,需要检查是否有空闲缓冲区,执行P(empty)消耗一个空闲缓冲区;

当生产者把产品放入缓冲区之后,对产品数量信号量执行V(full)操作,增加一个产品。

消费者进程需要先检查是产品数量,执行P(full)消耗一个产品(或是非空缓冲区);

当消费者从缓冲区中取走一个产品之后,对空闲缓冲区执行V(empty)操作,增加一个空闲缓冲区。

 

注意在实现过程中:缓冲区是l临界资源,各进程必须互斥地访问,即在临界区之前、之后分别对互斥信号量执行P(mutex)、

V(mutex)操作。

进程同步经典案例 --- 生产者和消费者问题_信号量_08

 

注意:实现互斥的P操作一定要在实现同步的P操作之后

进程同步经典案例 --- 生产者和消费者问题_临界区_09

 

生产产品和使用产品代码段如果放在临界区,会降低进程之间并发度,所以不建议

进程同步经典案例 --- 生产者和消费者问题_信号量_10

 

进程同步经典案例 --- 生产者和消费者问题_临界区_11