250 words
1 minute
信号量之读者写者问题——写者优先
读者写者问题实现写者优先 要求:
- 写者线程的优先级高于读者线程。
- 当有写者到来时应该阻塞读者线程的队列。
- 当有一个写者正在写时或在阻塞队列时应当阻塞读者进程的读操作,直到所有写者进程完成写操作时放开读者进程。
- 当没有写者进程时读者进程应该能够同时读取文件。
readcount
和writecount
表示读者写者数量,mutex1
和mutex2
实现互斥
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 performedP(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 performedV(w);P(mutex 2);writecount --;if (writecount == 0) V(r);V(mutex 2);
信号量之读者写者问题——写者优先
https://fuwari.vercel.app/posts/信号量之写者优先/