推 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