一、吸烟者问题
1、问题描述
假设一个系统有三个抽烟者进程和一个供应者进程。每个抽烟者不停地卷烟并抽掉,但是要卷起并抽掉一支烟,需要三种材料:烟草、纸、胶水。三个抽烟者中,每一个第一个拥有烟草,第二个拥有纸,第三个拥有胶水。供应者无限提供三种材料,供应者每次将两种材料放桌子上,拥有剩下材料的抽烟者卷一支烟并抽掉它,并给供应者一个信号完成了,供应者就会把另外两种材料再放桌子上,这个过程一直重复(三个抽烟者轮流抽烟)
2、问题分析
1、关系分析。
供应者与三个抽烟者分别是同步关系。由于抽烟者无法同时满足两个或以上的抽烟者,三个抽烟者对抽烟这个动作互斥(或由三个抽烟者轮流抽烟得知)
2、整理思路。
四个进程,供应者作为生产者向三个抽烟者提供材料
3、信号量设置
信号量offer1、offer2、offer3分别表示烟草和纸组合,烟草和胶水组合,胶水和纸组合。信号量finish表示抽烟完成信号
3、实现
二、读者-写者问题
建议看视频讲解,容易理解
地址:https://www.bilibili.com/video/av31584226/?p=10 定位50分钟
1、问题描述
有读者和写者两组并发进程,共享一个文件,当两个或两个以上的读进程同时访问共享数据时不会产生副作用,但若某个写进程 和其他进程(写进程或读进程)同时访问共享数据时则可能导致数据不一致的错误。因此要求:
- 允许多个读者可以同时对文件执行读操作;
- 只允许一个写者往文件中写信息;
- 任一写者再完成写操作之前不允许其他读者或写者工作;
- 写者执行写操作前,应让已有的读者和写者全部退出。
2、问题分析
3、实现
写优先: