admin 管理员组文章数量: 887019
读者
//写者优先
int wcount = 0; //用于记录写者数量
int rcount = 0; //用于记录读者数量
semaphore rmutex = 1; //用于读者进程互斥修改rcount
semaphore wmutex = 1; //用于写者进程互斥修改wcount
semaphore file = 1; //用于读者写者互斥访问file
semphore read = 1; //用于阻塞读者进程,实现写者优先writer()
{
P(wmutex);
if(wcount == 0)
P(read);
wcount++;
V(wmutex);
P(file); //写者互斥访问文件
do_writing();
V(file);
P(wmutex)
wcount--;
if(wcount == 0)
V(read);
V(wmutex);
}reader()
{
P(read); //检查写者队列是否为空。
P(rmutex);
if(rcount == 0)
P(file); //申请文件资源
rcount++;
V(rmutex);
V(read);
do_reading();
P(rmutex);
rcount--;
if(rcount == 0)
V(file);
V(rmutex);
}/*注意这里read的作用,开始有多个读者到来开始读file,它们全部进入读者队列,此时来了一个写者,执行了P(read)之后,后续到了的读者由于阻塞在read上,都不能再进入读者队列,而写者到来,则可以全部进入写者队列,因此保证了
写者优先,同时第一个写者读者执行了P(read)之后,也不能马上开始写,必须等到所有进入读者队列的读者都执行完
读操作(由于此时后续到来的读者阻塞在read上,因此读者队列数目会逐渐减少到0),通过V(file)通知写者可以
开始写操作
*/
本文标签: 读者
版权声明:本文标题:读者 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1723106170h738047.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论