- 生产者-消费者问题:生产资源-消费资源
- 理发师问题:服务-被服务
- 读者-写者问题:同类进程不互斥、异类进程互斥
- 哲学家进餐问题:只有一类进程,每个进程需要同时拥有多种资源才能运行
- 单纯的同步问题:前驱后继图
生产者-消费者问题
- 有几类进程?
- 每类进程对应一个函数
- 在每个函数内部,用中文描述进程动作
- 只做一次:不加whlie
- 不断重复:加while(1)
- 分析每一动作之前是否需要p什么?
- ⚠️隐含的互斥(eg 缓冲区的访问,需要加:P(mutex))
- 只要有P必定有V,每写一个P,就要安排V
- 所有PV写完之后,再去定义信号量(semaphore)
- 定义完之后思考每个信号量的初值是多少
- 检查多个P连续出现的地方是否可能产生死锁
- ⚠️可以尝试调整P顺序
- 若某个信号量PV操作总连续出现,中间没有夹其他P,则不可能因信号量产生死锁
- 读题检查,是否满足题目要求
哲学家进餐问题
无脑让进程一口气取得所有的资源,再开始运行
读者-写者问题
题目没有要求避免饥饿的话,用最简单的方法(读优先)可以得满分