该问题中对共享资源的读写操作的限制:
允许任意多的读进程同时读;
一次只允许一个写进程进行写操作;
如果有一个写进程正在进行写操作,禁止任何读进程进行读操作。
临界资源:
文件(共享资源)
读者个数计数器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的访问
}
怎么样改成写着者优先,现在是只要有读者,写者就要等最后一个读者读完了才能写入,要改成写者一来就不能再读入了,而要等当前的读者读完就写者就写入。