管程機制--解決寫者優先問題。
阿新 • • 發佈:2018-11-07
管程機制--解決寫者優先問題
讀者寫者問題經典的同步機制問題之一。
所謂寫者優先的優先性體現在一批讀者的寫操作上。意思是說當有寫者在執行寫操作,後面有等待寫的寫者,則讀者會一直等待。
也是說這一波寫者會連續進行寫操作,這波寫操作結束之後喚醒讀或者寫都可以。優越性體現在一波上。
來看下實現程式碼:
管程機制:
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
寫者程序同理。