读者写者问题

读者优先

readcount = 0 表示读者数量
mutex = 1 用于对writecount资源加锁
w = 1 用于对资源操作加锁
Reader() {
	P(mutex)
		readcount++
		if(readcount==1)
			P(w)
	V(mutex)
	...dosomething
	P(mutex)
		readcount--
		if(readcount==0)
			V(w)
	V(mutex)
}

Writer() {
	P(w)
	...dosomething
	V(w)
}

公平竞争

readcount= 0 表示读者数量
mutex = 1 用于对writecount资源加锁
x = 1 用于公平竞争,即取得获取资源的资格
w = 1 用于对资源操作加锁
Reader(){
	P(x)
		P(mutex)
		readcount++
		if(readcount==1)
			P(w)
		V(mutex)
	V(x)
	...dosomething
	P(mutex)
		readcount--
		if(readcount==0)
			V(w)
	V(mutex)
}

Writer(){
	P(x)
		P(w)
	...dosomething
		V(w)
	V(x)
}

写者优先

writecount = 0 表示读者数量
readcount = 0 表示写者数量
mutex1 = 1 用于对writecount资源加锁
mutex2 = 2 用于对readcount资源加锁
x = 1 用于保证在写进程执行时,后续的写进程优先执行
z = 1 用于保证在一个读进程申请资源加锁操作时,后续的读进程与写进程优先执行写进程
w = 1 用于对资源操作加锁

Reader() {
	P(z)
		P(x)
			P(mutex2)
				readcount++
				if(readcount==1)
					P(w)
			V(mutex2)
		V(x)
	V(z)
		...dosomething
		P(mutex2)
			readcout--
			if(readcount==0)
				V(w)
		V(mutex2)
}

Writer() {
	P(mutex1)
		writecount++
		if(writecount==1)
			P(x)
	V(mutex1)
	P(w)
	...dosomething
	V(w)
	P(mutex1)
		writecount--
		if(writecount==0)
			V(x)
	V(mutex1)
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值