读者写者问题实现写者优先
要求:
- 写者线程的优先级高于读者线程。
- 当有写者到来时应该阻塞读者线程的队列。
- 当有一个写者正在写时或在阻塞队列时应当阻塞读者进程的读操作,直到所有写者进程完成写操作时放开读者进程。
- 当没有写者进程时读者进程应该能够同时读取文件。
readcount
和writecount
表示读者写者数量,mutex1
和mutex2
实现互斥
r
为读者写者队列,但仅允许一个读进程排队
mutex3
其他读者在这个信号量上排队
伪代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| 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);
|