读者写者问题
2020年10月7日
问题
多个Reader进程,多个Writer进程,一个共享文件F。 要求: 1.允许多个Reader进程同时读文件 2.不允许任何一个Writer进程与其他进程同时访问(读或写)文件 写出Reader-Writer问题的算法,避免由于不断有Reader出现而使得Writer无限期等待。
代码
int count
=0;
semaphore F
= 1;
semaphore W
= 1;
semaphore mutex
= 1;
writer()
{
while(1)
{
P(W
);
P(F
);
write();
V(F
);
V(W
);
}
}
reader()
{
while (1)
{
P(W
);
P(mutex
);
if (count
== 0)
P(rw
);
count
++;
V(mutex
);
V(W
);
read();
P(mutex
);
count
--;
if (count
== 0)
V(rw
);
V(mutex
);
}
}
这题的关键在于如何保证避免读者不断读文件导致写者一直阻塞等待,方法是加一个W信号量