看板 Grad-ProbAsk 關於我們 聯絡資訊
第二題 http://ppt.cc/Qh_J 答案c 我選a 想法是Q要等P呼叫x.signal才能跑 請高手解說orz graduate版有H大提供的這份 還沒碰的快去抓吧 monitor要炸啦啦啦orz -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.177.41.177
pikachu123:你錯了他是要考你Hoare monitor 指是他把PQ對調 02/13 15:48
pikachu123:跟恐龍講的相反 Q先前卡住 P救他所以是P Wait 02/13 15:49
pikachu123:Q until Q exit or suspended again 02/13 15:49
pikachu123:你可能要再去看看 用Semaphore作Monitor那段 02/13 15:50
pikachu123:我講錯了0.0,她題目PQ跟恐龍的一樣 不過不影響 02/13 15:58
pikachu123:他那個就是signal and wait 你講的有點文不對題 02/13 15:59
pikachu123:P就已經呼叫 x.signal ,另外一種叫Signal and Continue 02/13 16:00
pikachu123:Q wiat until P exit or another condition 02/13 16:01
onlyeric23:好謝謝 放棄/誤 02/13 16:06
r596twy:題目有說 P執行 X.signal()且Q suspended 按照題意去trace 02/13 16:16
KiroKu:q suspend 是停在Wait(next)? 02/13 16:18
r596twy:由此可知 X_count > 0 而 "Q is suspended"表示Q執行了 02/13 16:18
r596twy:x.wait(), 而且是卡在wait(x_sem) 02/13 16:19
r596twy:這時P執行 X.signal() 執行到wait(next) 停下來(初始值=0) 02/13 16:21
r596twy:途中P有執行signal(x_sem) 因此Q被P救出來 02/13 16:22
r596twy:這時 就出現了兩個救P的分歧點 02/13 16:22
KiroKu:嗯嗯 卸卸 02/13 16:23
r596twy:第一個程式碼 顯示說當process執行完時會去檢查next_count 02/13 16:24
r596twy:看來K大已經懂了 那就不用再打下去啦~ 02/13 16:24
KiroKu:其實我是覺得很奇怪這樣代表一定要先要有人等在那邊 然後 02/13 16:26
KiroKu:有人執行x.signal()才能跑 ? 02/13 16:27
r596twy:所以x.signal就會出現兩種作用 1.沒人卡時無作用 02/13 16:28
r596twy:2.有人卡時去wakeup 02/13 16:28
KiroKu:那只有一個人時 不就一直停在那..這樣就starvation? 02/13 16:30
r596twy:嗯 只能等到有人來救它 但通常是多個process才會考慮同步 02/13 16:38
r596twy:相信總有一天它會被喚醒的~ 02/13 16:38
onlyeric23:K大是說Q被卡死嗎? 這邊應該是程式設計的目的吧? 02/13 16:39
onlyeric23:目前理解condition是用來控制operation順序 是這樣嗎? 02/13 16:41
onlyeric23:就像sem中 A最後call signal B一開始call wait 02/13 16:41
onlyeric23:讓A必優先於B 是這樣嗎? 02/13 16:42
r596twy:所以當你sem設定初值為0 通常就是希望使用它的process要等 02/13 16:48
r596twy:等某一個process執行了signal此sem 才能夠執行下去 02/13 16:48
r596twy:此時就有了順序之分 02/13 16:48
onlyeric23:感謝 原本以為這邊可以放的orz 02/13 16:49
sneak: Q until Q e https://daxiv.com 09/11 14:55