主要介绍的是使用记录性信号量来实现生产者消费者问题。 在介绍生产者消费者问题之前先介绍一些记录型信号量: 采取的是让权等待策略,wait()和signal()分别用p()和v()来表示 其中包含了一个用于表示资源数目的整型变量value,还包含了一个进程链表指针list。 结构体代码:
1 | typedef struct{ |
使用PV操作实现互斥操作: Semaphore mutex=1; P(mutex) 操作; V(mutex) 一般在互斥操作中PV是成对出现的。 而在同步操作中PV操作一般是出现在不同的进程中。 使用记录性信号量来实现消费者生产者问题: 有三种情况:
- 一个生产者、一个消费者、缓冲区只有一个容量
- 一个生产者、一个消费者、缓冲区有多个空间
- 多个生产者、多个消费者、缓冲区有多个空间
情况一的实现伪代码:
1 | //情况一 |
由于只有一个消费者和一个生产者所以不需要设置互斥信号量 情况二的实现伪代码:
1 | //情况二 |
情况三具体实现伪代码:
1 | //情况三 |
多个消费者和多个消费者实现可以使用多线程来实现,具体实现代码我在之前的博文上已经给出大家可自行翻阅。