管程机制--解决写者优先问题
读者写者问题经典的同步机制问题之一。
所谓写者优先的优先性体现在一批读者的写操作上。意思是说当有写者在执行写操作,后面有等待写的写者,则读者会一直等待。
也是说这一波写者会连续进行写操作,这波写操作结束之后唤醒读或者写都可以。优越性体现在一波上。
来看下实现代码:
管程机制:
moniter reader_writer{
int write, read; //管程的局部变量。
Condition r,w; //进行同步机制的条件变量
Entry start_read() {
if(write>0) r.wait(); //判断是否有写者在写。
read++;
r.signal();
}
Entry end_read() {
read--;
if(read==0) w.signal(); //一波读者读完才能唤醒写者.
}
Entry start_write() {
write++;
if(writer>0||read>0) w.wait(); //等待写者写完或者一波读者读完。
}
Entry end_write() {
wrier--;
if(write==0) w.signal();
r.signal() //此时唤醒读者写者都可以,因为一波写者已经写完了。
}
}
读者进程先调用start_read--执行写操作--调用end_read
写者进程同理。