看板 Grad-ProbAsk 關於我們 聯絡資訊
※ 引述《wsx02 ()》之銘言: : http://www.lib.tku.edu.tw/service/exampdf/master/96master/9660088.pdf : 第五題 : 請問有人知道這題怎麼解嗎? 解得不太確定 參考看看就好 (a) R1正在讀時 R2,W1,R3 依序到 R2到時 writing = 0 , 也沒有writer要準備寫 不符合 if(writing || !empty(OK_to_write) 不會卡在OK_to_read.wait => R1,R2 可以讀 W1到時 read_cnt!=0 (R1,R2正在讀) , writing = 0 (沒有人在寫入) 符合 if(read_cnt!=0 || writing) 所以會卡在OK_to_write.wait => W1卡在外面 R3到時 writing = 0 , 但有W1準備寫入 符合 if(writing || !empty(OK_to_write) R3卡在OK_to_read.wait =>R3卡在外面 R1,R2讀完之後 會執行 OK_to_write.signal 讓W1進去寫 W1正在寫時 W2,R4,W3依序抵達 => R3和W2,R4,W3會都被卡在外面 W1寫完時 因為有R3,R4 符合 if(!empty(OK_to_read)) 然後執行OK_to_read讓R3讀 , 但R4會因為有W2,W3準備寫入而卡在外面 R3讀完後會執行OK_to_write.signal讓W2進去寫 W2正在寫時 R5,W4依序到達 => R5,W4被卡在外面 W2寫完時 因為有R4,R5 符合 if(!empty(OK_to_read)) 然後執行OK_to_read讓R4讀 , 但R5會因為有W3,W4準備寫入而卡在外面 R4讀完後會執行OK_to_write.signal讓W3進去寫 W3寫完 因為有R5 符合 if(!empty(OK_to_read)) 然後執行OK_to_read讓R5讀 R5讀完後會執行OK_to_write.signal讓W4進去寫 故執行順序為:R1,R2,W1,R3,W2,R4,W3,R5,W4 其中R1和R2可以同時讀 (b) Reader可以進入讀取的條件變成:"只有有人在寫入時時才要卡在外面" R1正在讀時 R2,W1,R3 依序到 R2,R3都可進入讀取 , W1卡在外面 R1,R2,R3都讀取完後 ,W1開始寫 W1正在寫時 W2,R4,W3依序抵達 => W2,R4,W3都被卡在外面 W1寫完時 因為有R4 符合 if(!empty(OK_to_read)) 然後執行OK_to_read讓R4讀 R4讀完後會執行OK_to_write.signal讓W2進去寫 W2正在寫時 R5,W4依序到達 => R5,W4被卡在外面 W2寫完時 因為有R5 符合 if(!empty(OK_to_read)) 然後執行OK_to_read讓R5讀 R5讀完後會執行OK_to_write.signal讓W3進去寫 W3寫完此時已沒reader 則執行else OK_to_write.signal 讓W4進去寫 故執行順序為:R1,R2,R3,W1,R4,W2,R5,W3,W4 有錯誤麻煩更正 感謝~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.47.219.125 ※ 編輯: seiki 來自: 114.47.219.125 (03/14 00:00)