有限缓冲问题 (Bounded Buffer)
- 假设缓冲池有 n 个缓冲项,每个缓冲项能存一个数据项。信号量 mutex 提供了对缓冲池访 问的互斥要求。并初始化为 1。
- 信号量 empty 和 full 分别用来表示空缓存项和满缓存项的个数。信号量 empty 初始化为 n;信号量 full 初始化为 0。
下面为消费者生产者问题的pseudocode:
share-data structure: 共享变量的结构体
int n; semaphore mutex = 1; semaphore empty = n; semaphore full = 0;
producer: 生产者
while (true){ //produce an item wait(empty); // empty-=1 wait(mutex); // 是否有权限添加item到buffer里面 //add item to buffer 添加item到buffer里面 signal(mutex); //使用过后,释放mutex signal(full); // full+=1 };
consumer: 消费者
while (true){ wait(full); //full-=1 wait(mutex); //是否有权限消费buffer里的item //remove item from buffer //如有权限,且buffer里面有item可供使用,取走使用 signal(mutex); //使用过后,释放mutex signal(empty); //empty+=1 //consume the just removed item };
学习记录,多多包涵。如有错误,欢迎指正。谢谢~
Reference:
[1]:Operating.System.Concepts.10th.Edition