读者写者问题之读者优先

参考博客
http://blog.sina.com.cn/s/blog_a3eacdb20101ct0c.html

读者写者问题
(1)允许多个读者同时执行读操作;
(2)不允许读者、写者同时操作;
(3)不允许多个写者同时操作。

Reader和Writer的同步问题分为读者优先、弱写者优先(公平竞争)和强写者优先三种情况,它们的处理方式不同。
(1)读者优先。
对于读者优先,应先满足下列条件
如果新读者到:
①无读者、写者,新读者可以读;
②有写者等待,但有其它读者正在读,则新读者也可以读;
③有写者写,新读者等待。
如果新写者到:
①无读者,新写者可以写;
②有读者,新写者等待;
③有其它写者,新写者等待。

单纯使用信号量不能解决读者与写者问题,

引入计数器rCount 对读进程进行计数;

rCountMutex 是用于对计数器rCount 操作的互斥信号量(Semaphore );

rwMutex表示是读者与写者互斥的信号量;

于是读者优先的程序设计如下:

伪代码:

int rCount=0;

int rCountMutex=1;

int rwMutex=1;

void reader(){

P(rCountMutex);

rCount++;

if(rCount==1)P(rwMutex);

V(rCountMutex);

读操作;

P(rCountMutex);

rCount--;

if(rCount==0)V(reMutex);

V(rCountMutex);

}

void writer(){

P(rwMutex)

写操作;

V(rwMutex);

}


源代码下载:

http://pan.baidu.com/s/1bn8L9Ob


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值