问题描述
用信号量模拟生产者-消费者问题的过程。生产者和消费者两个线程共享同一个缓冲区,生产者不断向缓冲区中添加产品,消费者从缓冲区中消费产品。要保证缓冲区满了之后生产者不能再继续添加产品,需要等消费者至少消费一个产品之后生产者才能继续生产产品;缓冲区空了之后消费者不能再消费产品,需要等生产者至少生产一个产品之后消费者才能继续消费产品。
向缓冲区中添加产品和从缓冲区消费产品需要互斥操作保持同步。
生产者需要等待缓冲区有空间才能生产产品;消费者也不能在缓冲区为空时消费产品。这两个过程需要信号量来通知进行。
设置三个信号量
Mutex信号量实现生产者和消费之间的间接相互制约关系,资源共享,在某一时刻只能有一个享用资源。
Full、Empty信号量实现生产者和消费者之间的直接相互制约关系,进程合作。Empty为生产者的约束,缓冲区满使生产者不能操作。Full为消费者的制约,缓冲区空使消费者不能操作。
完整代码
#include <iostream>
#include <fstream>