问答题 用信号量和P操作、V操作编写程序:多个读进程和多个写进程共享一个文件。要求:
(1)写操作只能互斥、独立进行;
(2)读操作可以同时共享读文件;
(3)当有写操作请求时,禁止新的读操作;有正在读文件的进程时,在读操作完成后进行写文件操作。
【正确答案】
【答案解析】设置信号量:
readcount:=0,nwriter:=0,swriter:=1,mutex:=1,wrt:=1;
读者:P(swriter);
if(nwriter==0) {
P(mutex);
readcount:=readcount +1;
if(readcount==1)
P(wrt);
V(mutex);
V(swriter);
}
else {
V(swriter);
block();
}
reading;
P(mutex);
readcount:=readcount-1;
if(readcount==0)
V(wrt);
V(mutex);
写者:P(swriter);
nwriter:=nwriter+1;
P(wrt);
writing;
P(swriter);
nwriter:=nwriter-1;
if(nwriter==0) {
wakeup(读者进程);
V(swriter); }
else {
V(wrt);
V(swriter);
}