操作系统——管程——2.15

背景

之前的pv操作,过于繁琐,pv的顺序一不留神就容易就会发生死锁。
因此“管程”这一种高级同步机制诞生了。

定义和基本特征

管程中的共享数据结构,只能由管程中的函数来调用
每次只允许一个进程在管程中执行某个函数
类似于Java当中的synchronized关键字

实现方式

伪代码 实现 管程

monitor ProdeucerConsumer
	condition full,empty; // 条件变量 用来实现同步
	int count = 0; // 缓冲区的产品数量
	void insert(Item item){
		if (count == N) // 先判断 是否 满了,满了则挂起
			wait (full); 
		count++;
		insert_item(item);
	
		if (count == 1) // 若第一次插入 唤醒进程
			signal (empty);
	}
	
	Item remove(){
		if (count == 0) // 判断当前 是否有产品
			wait (empty); // 没有则 挂起
		count--;
		
		if (count == N - 1) 
			signal (full); // 满了之后,又消费了一个产品,所有换新 insert进程
		return remove_item();
	} 
end monitor;

生产者进程

producer(){
	while(1){
		item = 生产产品;
		ProdecerConsumer.insert(item);
	}
}

消费者进程

consumer(){
	while(1){
		item = ProdecerConsumer.remove();
		消费产品item;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值