经典进程同步与互斥问题
文章目录
一、生产者与消费者问题
1.1 问题概述
- 生产者与消费者互斥使用一个缓冲池
- 当缓冲池为空时,生产者才能写入数据
- 当缓冲池不为空时,消费者才能读取数据
1.2 解决方法
设置3个信号量:mutex=1,full=0,empty=n(假设缓冲池大小为n)
- mutex:互斥信号量
- full:表达缓冲池中数据量的信号量,初值为0
- empty:表达缓冲池中空闲块的信号量,初值为n,即缓冲池的大小
- 生产者
P(empty)
P(mutex)
写入数据
V(mutex)
V(full)
- 消费者
P(full)
P(mutex)
读取数据
V(mutex)
V(empty)
二、读者与写者问题
2.1 问题概述
一个数据对象(如文件、记录)可以被多个进程共享。这些进程可以分为两类:
- 读者进程:只读取数据对象的值
- 写者进程:修改或者写入数据对象的值
这类问题具有以下特点:
- 读者进程之间不互斥
- 写者与写者、写者与读者之间互斥
2.2 解决方法
设置3个信号量