admin 管理员组

文章数量: 887017

[操作系统]

有限缓冲问题 (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 itemwait(empty); // empty-=1wait(mutex); // 是否有权限添加item到buffer里面//add item to buffer 添加item到buffer里面signal(mutex); //使用过后,释放mutexsignal(full); // full+=1
};

consumer: 消费者

while (true){wait(full); //full-=1wait(mutex); //是否有权限消费buffer里的item//remove item from buffer //如有权限,且buffer里面有item可供使用,取走使用signal(mutex); //使用过后,释放mutexsignal(empty); //empty+=1//consume the just removed item
};

学习记录,多多包涵。如有错误,欢迎指正。谢谢~

Reference:

[1]:Operating.System.Concepts.10th.Edition

本文标签: 操作系统