| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 841 人关注过本帖
标题:读者——写着问题(进程管理)
只看楼主 加入收藏
yushui
Rank: 3Rank: 3
等 级:论坛游民
威 望:7
帖 子:1355
专家分:22
注 册:2006-7-19
结帖率:100%
收藏
 问题点数:0 回复次数:3 
读者——写着问题(进程管理)

该问题中对共享资源的读写操作的限制:
允许任意多的读进程同时读;
一次只允许一个写进程进行写操作;
如果有一个写进程正在进行写操作,禁止任何读进程进行读操作。

临界资源:
文件(共享资源)
读者个数计数器Rcount,初值为0

互斥信号量的设置:
Wmutex 控制对文件的访问,初值为1
Rmutex 控制对Rcount的访问,初值为1

写着算法
semaphore Wmutex=1, Rmutex=1;
int Rcount=0;

void writer( ) { // 写者进程
while (true) {
P(Wmutex); // 排斥对文件的访问
write; // 写数据
V(Wmutex); // 恢复对文件的访问
}
}
读者算法
void reader ( ) {
while (true) {
P(Rmutex); // 排斥对Rcount的访问
if (Rcount==0) P(Wmutex);
// 如果这是第1个读者,则排斥对文件的写操作
Rcount=Rcount+1; // 又多了一个读者
V(Rmutex); // 恢复对Rcount的访问
read; // 读数据
P(Rmutex); // 排斥对Rcount的访问
Rcount=Rcount-1;
if (Rcount==0) V(Wmutex);
//如果这是最后一个读者,则恢复对文件的写操作
V(Rmutex); // 恢复对Rcount的访问
}
怎么样改成写着者优先,现在是只要有读者,写者就要等最后一个读者读完了才能写入,要改成写者一来就不能再读入了,而要等当前的读者读完就写者就写入。

搜索更多相关主题的帖子: 进程 计数器 Rcount 资源 Wmutex 
2007-04-06 19:57
system32
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:58
帖 子:3096
专家分:0
注 册:2006-9-24
收藏
得分:0 

发到编程区


[glow=200,blue,1]世界上妞是无限的,而我们的精力是有限的,用有限去搞无限,死定了。要用有限的精力去泡一个有钱妞,要发达,吃软饭![/glow]
2007-04-07 10:48
七斤饼
Rank: 1
等 级:新手上路
帖 子:97
专家分:0
注 册:2006-12-19
收藏
得分:0 
在它后面Rcount=Rcount+1; 加一句 if (Rcount==1) 的情况

单独的操作系统还能帮你解决 你的这些我都有些无奈了

你的这个问题随便一本操作系统书上都有啊

本人为.......qijingbin........
2007-04-07 12:40
yushui
Rank: 3Rank: 3
等 级:论坛游民
威 望:7
帖 子:1355
专家分:22
注 册:2006-7-19
收藏
得分:0 
void reader ( ) {
while (true) {
P(Rmutex); // 排斥对Rcount的访问
if (Rcount==0) P(Wmutex);
// 如果这是第1个读者,则排斥对文件的写操作
Rcount=Rcount+1; // 又多了一个读者
V(Rmutex); // 恢复对Rcount的访问(我觉得在这儿应该加个限制条件,就是写者来了就不恢复对Rcount的访问,而是等所有在进程的读者读完了写者来写入了后再读,可就是不知道怎么加)
read; // 读数据
P(Rmutex); // 排斥对Rcount的访问
Rcount=Rcount-1;
if (Rcount==0) V(Wmutex);
//如果这是最后一个读者,则恢复对文件的写操作
V(Rmutex); // 恢复对Rcount的访问
}

fighting!from now on!
2007-04-07 19:45
快速回复:读者——写着问题(进程管理)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030952 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved