250 words
1 minute
信号量之读者写者问题——写者优先

读者写者问题实现写者优先 要求:

  • 写者线程的优先级高于读者线程。
  • 当有写者到来时应该阻塞读者线程的队列。
  • 当有一个写者正在写时或在阻塞队列时应当阻塞读者进程的读操作,直到所有写者进程完成写操作时放开读者进程。
  • 当没有写者进程时读者进程应该能够同时读取文件。

readcountwritecount表示读者写者数量,mutex1mutex2实现互斥 r为读者写者队列,但仅允许一个读进程排队 mutex3其他读者在这个信号量上排队

伪代码如下:

int readcount=0, writecount=0;
semaphore mutex1=1, mutex2=1, mutex3=1, w=1, r=1 ;
读者进程:
P(mutex 3);
P(r);
P(mutex 1);
readcount++;
if (readcount == 1 ) P(w);
V(mutex 1);
V(r);
V(mutex 3);
reading is performed
P(mutex 1);
readcount --;
if (readcount == 0 ) V(w);
V(mutex 1);
写者进程:
P(mutex 2);
writecount++;
if (writecount == 1 )
P(r);
V(mutex 2);
P(w);
writing is performed
V(w);
P(mutex 2);
writecount --;
if (writecount == 0) V(r);
V(mutex 2);
信号量之读者写者问题——写者优先
https://fuwari.vercel.app/posts/信号量之写者优先/
Author
Aur0r3
Published at
2025-04-12
License
CC BY-NC-SA 4.0