您的位置:首页 > 其它

经典操作系统问题――读写者问题(读者优先)

2013-08-17 11:09 211 查看
问题:
一些读者和一些写者对同一个黑板进行读写。多个读者可同时读黑板,但一个时刻只能有一个写者,读者写者不能同时使用黑板。对使用黑板优先级的不同规定使读者-写者问题又可分为几类。第一类问题规定读者优先级较高,仅当无读者时允许写者使用黑板。

P,V原语实现:
进程: writer-写者进程 reader-读者进程
定义变量:
mutex=1; //黑板资源
reader_mutex=1; //控制读者间的互斥

r_count=0; //统计读者人数

//reader - 读者进程
{
while(true)
{
p(reader_mutex);   //控制读者的互斥,防止出现两个读者同时执行reader_count++,而reader_count只加1;
reader_count++;    //要使用黑板的读者人数加1;
if(reader_count==1)
p(mutex);      //如果是第一个读者,就要申请黑板;
v(reader_mutex);  //释放变量,让下一个读者可以进来读黑板;
read();        //进行读黑板操作;
p(reader_mutex);
reader_count--; //读者读完黑板后,读者人数要减1,同样也要考虑互斥的情况;
if(reader_count==0)
v(mutex);        //如果是最后一个读者,就要释放黑板资源;
v(reader_mutex);
}


//writer - 写者进程
{
while(true)
{
p(mutex);     //申请黑板资源;
write();      //进行写操作;
v(mutex);     //释放黑板资源;
}
}


本文出自 “技术在于坚持” 博客,请务必保留此出处http://minilinux.blog.51cto.com/4499123/1275337
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: