⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pv操作.txt

📁 读者写者问题
💻 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 + -