📄 pv操作.txt
字号:
读者写者问题,共享原则如下:1、读/写互斥访问;2、写/写互斥访问;3、允许多个读者同时对文件进行访问。
(1)读者优先
semaphore rmutex=1,rwmutex=1;
int count=0;
Cobegin
reader: writer:
begin begin
repeat repeat
P(rmutex) P(rwmutex)
if (count==0) then P(rwmutex); writing;
count:=count+1; V(rwmutex)
V(rmutex) until false;
reading; end
P(rmutex)
count:=count-1;
if (count==0) then V(rwmutex);
V(rmutex)
until false;
end;
Coend
(2)写者优先
int readcount=0,writecount=0;
semaphore rmutex=1,wmutex=1,rwmutex=1,z=1,x=1;
reader writer
begin begin
repeat repeat
P(z); P(wmutex)
P(x); writecount:=writecount+1;
P(rmutex) if writecount=1 then P(x);
readcount:=readcount+1; V(wmutex)
if (readcount==1) P(rwmutex); P(rwmutex)
V(rmutex) writing;
V(x) V(rwmutex)
V(z) P(wmutex)
reading; writecount:=writecount-1;
P(rmutex) if writecount=0 then V(x);
readcount:=readcount-1; V(wmutex)
if (readcount==0) V(rwmutex); until false;
v(rmutex) end
until false;
end
(3)读者与写者公平竞争
int readcount=0;
semaphore rmutex=1,rwmutex=1,z=1;
void reader() void writer()
{ {
while(1) while(1)
{ {
P(z) P(z)
P(rmutex) P(rwmutex)
++readcount; writing;
if (readcount==1) P(rwmutex); V(rwmutex)
V(rmutex) V(z)
V(z) }
reading; }
P(rmutex)
--readcount;
if(readcount==0) V(rwmutex);
V(rmutex)
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -