记录型信号量题型

##进程互斥同步问题

  • 记录型信号量

##题型1(单生产者,单消费者,单缓)

1.由三个进程get,copy和put以及两个缓冲区buffer1和buffer2完成 一项输入/输出操作。进程get的功能是把一张卡片上的信息从读卡机 上读进buffer1;进程copy的功能是把buffer1中的信息复制到buffer2;进程put的功能是取出buffer2中的信息并从打印机上打印输出。试 用P、V操作完成这三个进程间的尽可能并发正确执行的关系(用程序或框图表示),并指明信号量的作用和初值

伪代码:


#定义信号量

var mutexB1,mutexB2,emptyB1,emptyB2,fullB1,fullB2:semaphore:=(1,1,1,1,0,0)

begin
	parbegin:
		
		get进程:repeat
					//等待2个资源
					wait(mutexB1)
					wait(emptyB1)
					buffer1:=get(card)
					//释放资源
					signal(mutexB1)
					//现在第一个缓冲区已经满了
					signal(fullB1)
		copy进程:repeat
					wait(mutexB2)
					wait(mutexB1)
					wait(fullB1)
					wait(emptyB2)
					//拷贝操作			
					buffer2:=copy(buffer1)
					//释放资源
					signal(mutexb2)
					signal(mutexb1)
					signal(emptyB1)
					signal(fullB2)
		Put进程:repeat
					wait(mutexB2)
					wait(fullB2)
					printf(buffer2)
					
					//释放资源
					signal(emptyB2)
					signal(mutexB2)
				

		
	parend


##题型2(多人,多缓)

2.某寺庙,有小和尚、老和尚若干。有一水缸,由小和尚提水入缸老和尚饮用。水缸可容十桶水,水取自同一井中。水井径窄,每次只能容一桶 取水。水桶总数为3个。每次入、取水仅为一桶,且不可同时进行。试给出有关取水、入水的算法描述

伪代码:PV

var mutexSJ(水井互斥),mutexSG(水缸互斥[每次入、取水仅为一桶,且不可同时进行]),emptyTCount,canSGEmptyCount(进剩余),canSGFullCount(现在):semaphore:=(1,1,3,10,0)


parbegin

		

		小和尚:
			P(canSGEmptyCount)//看水井是不是空的
			P(emptyTCount)//先看有空桶没有
			P(mutexSJ)
			拿桶取水
			V(mutexSJ)//释放水井
			P(mutexSG)//访问水缸互斥
			装水到水缸
			V(mutexSG)
			V(canSGFullCount)//增加一个填充容量
		
		老和尚:
			P(mutexSG)
			P(canSGFullCount)
			P(emptyTCount)//需要一个空桶来喝水
			和尚喝水
			V(mutexSG)
			V(canSGEmptyCount)
			V(emptyTCount)//释放桶
			

转载于:https://my.oschina.net/u/2525925/blog/818384

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值