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

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

临界资源:
文件(共享资源)
读者个数计数器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
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.027824 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved