第二章 进程与线程 十八、(生产者-消费者问题),(多生产者-多消费者问题),(抽烟者问题),(读者-写者问题),(哲学家就餐问题)

目录

一、生产者——消费者问题

(一)、定义

(二)、PV操作题目分析步骤:

1、步骤

2、各变量初始值

3、易错点

二、多生产者——多消费者问题

​编辑

三、抽烟者问题

(一)、问题分析

(二)、实现

四、读者-写者问题

(一)、问题描述

(二)、要求

(三)、关系分析

1、此问题中存在两种进程:

2、两类互斥关系

(四)、实现

五、哲学家就餐问题


一、生产者——消费者问题

(一)、定义

1、生产者、消费者共享一个初始为空、大小为n的缓冲区。

2、只有缓冲区没满时,生产者才能把产品放入缓冲区,否则必须等待。

3、只有缓冲区不空时,消费者才能从中取出产品,否则必须等待。

4、缓冲区是临界资源,各进程必须互斥地访问。

第二章 进程与线程 十八、(生产者-消费者问题),(多生产者-多消费者问题),(抽烟者问题),(读者-写者问题),(哲学家就餐问题)_第1张图片

(二)、PV操作题目分析步骤:

1、步骤

1.关系分析。找出题目中描述的各个进程,分析它们之间的同步、互斥关系。

2.整理思路。根据各进程的操作流程确定P、V操作的大致顺序。

3.设置信号量。并根据题目条件确定信号量初值。(互斥信号量初值一般为1,同步信号量的初
始值要看对应资源的初始值是多少)

2、各变量初始值

3、易错点

实现同步和实现互斥的两个P操作的先后顺序(死锁)。

二、多生产者——多消费者问题

三、抽烟者问题

(一)、问题分析

第二章 进程与线程 十八、(生产者-消费者问题),(多生产者-多消费者问题),(抽烟者问题),(读者-写者问题),(哲学家就餐问题)_第2张图片

(二)、实现

每个吸烟者在抽烟时会对finish变量进行P操作,导致其他吸烟者在这里堵塞,而当它吸完烟后,又会对finish进行V操作,让其他吸烟者可以吸烟。

所以它不需要设置互斥信号量。

第二章 进程与线程 十八、(生产者-消费者问题),(多生产者-多消费者问题),(抽烟者问题),(读者-写者问题),(哲学家就餐问题)_第3张图片

四、读者-写者问题

(一)、问题描述

读者进程并不会取走数据

第二章 进程与线程 十八、(生产者-消费者问题),(多生产者-多消费者问题),(抽烟者问题),(读者-写者问题),(哲学家就餐问题)_第4张图片

(二)、要求

1、允许多个读者可以同时对文件执行读操作

2、只允许一个写者往文件写数据

3、任一写者在完成写操作之前不允许其他读者或写者工作

4、写者执行写操作前,应让已有的读者和写者全部退出

(三)、关系分析

1、此问题中存在两种进程:

读进程、写进程

2、两类互斥关系

写进程--写进程、写进程--读进程

(四)、实现

但是此实现方法有可能导致写进程饿死

第二章 进程与线程 十八、(生产者-消费者问题),(多生产者-多消费者问题),(抽烟者问题),(读者-写者问题),(哲学家就餐问题)_第5张图片

于是新加进了一个w变量,实现“写优先”

第二章 进程与线程 十八、(生产者-消费者问题),(多生产者-多消费者问题),(抽烟者问题),(读者-写者问题),(哲学家就餐问题)_第6张图片

五、哲学家就餐问题

这种实现方式只允许一个哲学家拿筷子

你可能感兴趣的:(数据结构学习,java,开发语言)