推 Transfat: 是不是忘記貼啥了12/17 22:01
推 newpuma: ……12/17 22:29
推 lrt89604: 這真的要神人才知道了12/17 23:26
→ hopward: 這連神人都沒辦法 應該要神才有辦法了12/18 00:26
推 fsab00070875: 所以我說的那個醬汁呢?12/18 02:59
→ fsab00070875: 打錯,圖呢?12/18 03:00
抱歉我漏了!已附上感恩><
※ 編輯: ssssIssss (140.112.25.105), 12/18/2016 11:14:20
推 aa06697: 這個code是hoare monitor: process在signal後會讓被救的p12/18 15:01
→ aa06697: rocess先進來然後自己進去一個特別的queue(優先權比condi12/18 15:01
→ aa06697: tion readyqueue還高的queue)12/18 15:01
→ aa06697: next_count用來記錄有多少個「救命恩人」 因為在process12/18 15:03
→ aa06697: wait的時候 代表cpu要給其他人 而此時若有救命恩人要優先12/18 15:03
→ aa06697: 救他 沒有才讓其他在等待的process進入monitor12/18 15:03
→ aa06697: 所以lineA lineB 就跟最左邊那格的code一樣12/18 15:04
→ aa06697: 然後wait的process會卡在wait(x_sem) lineC就是signal(x_12/18 15:08
→ aa06697: sem) 要救在wait的process 然後wait(next) 就是讓救命恩12/18 15:08
→ aa06697: 人進去特別queue的用途12/18 15:08
推 aa06697: 補充一下 semaphore的wait跟monitor的wait意義不太一樣喔12/18 15:35
→ aa06697: 一個是搶執行權 一個是強迫去condition variable的queue12/18 15:35
→ aa06697: 休息 12/18 15:35
→ yupog2003: 看完樓上的講解感覺又好像再把洪逸講的聽了一遍,感謝 12/18 16:25
那我想再問一下關於兩種wait的不同@@
aa大是指若出現在code裡的wait,是在搶執行權,所以就如同最基本的那樣加一減一就好
?
而在monitor上的wait框,就是由一連串code所組成,用來安排process進入queue?
※ 編輯: ssssIssss (140.112.4.190), 12/19/2016 13:31:03
→ aa06697: yes 12/19 15:21