信号量机制
1. 实现进程互斥
- 分析问题,确定临界区
- 设置互斥信号量,初值为1
- 临界区之前对信号量执行
P操作
- 临界区之后对信号量执行
V操作
2. 实现进程同步
- 分析问题,找出哪里需要实现“一前一后”的同步关系
- 设置同步信号量,初始值为0
- 在“前操作”之后执行
V操作
- 在“后操作”之前执行
P操作
3. 实现进程的前驱关系
- 分析问题,画出前驱图,把每一对前驱关系都看成一个同步问题
- 为每一对前驱关系设置同步信号量,初值为0
- 在每个“前操作”之后执行
V操作
- 在每个“后操作”之前执行
P操作
注:
申请资源时进行P操作
释放资源时进程V操作
生产者-消费者问题
问题描述
系统中有一组生产者进程和一组消费者进程,生产者进程每次生产一个产品放入缓冲区,消费者
进程每次从缓冲区中取出一个产品并使用。(注:这里的“产品”理解为某种数据)
生产者、消费者共享一个初始为空、大小为n的缓冲区。
- 只有缓冲区没满时,生产者才能把产品放入缓冲区,否则必须等待。
分析:
同步关系,缓冲区满时,生产者要等待消费者取走产品
- 只有缓冲区不空时,消费者才能从中取出产品,否