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