[操作系统] -- 进程同步之Bounded Buffer

本文探讨了并发编程中的经典问题——生产者消费者模型,通过使用信号量实现对有限缓冲区的同步访问。在该模型中,信号量mutex用于互斥访问缓冲区,empty和full则分别表示空闲缓冲项和已填满的缓冲项数量。生产者等待empty信号量,消费者等待full信号量,确保了数据的正确生产和消费。此模型为多线程环境下的资源管理提供了一种有效解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有限缓冲问题 (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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值