看板 Grad-ProbAsk 關於我們 聯絡資訊
用下面這個演算法來實作critical section do { flag[i] = TRUE; ---------------1 turn = j; ---------------2 while (flag[j] && turn == j) ; {critical section} flag[i] = false; {remainder section} } while (1); flag陣列紀錄個別process是否想要進入critical section turn變數指出目前系統允許哪個process進入critical section 但是只要我標示的1跟2互換 變成 trun = j; flag[i] = TRUE; 這個時候演算法就沒辦法達到預期的目的 請問是什麼原因呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.228.24.47
hunter0904:為什麼沒達到預期的目的? mutual exclusion,progress, 10/31 08:35
hunter0904:bounded waiting感覺都有?? 只是執行的順序可能受影響 10/31 08:36
hunter0904:turn 一個時間只有一個值 就有mutual exclu 10/31 08:38
hunter0904:當你一個process執行完之後 waiting變成false. 10/31 08:39
hunter0904:他沒有意願參予critical section的選擇 也沒有影響到 10/31 08:39
hunter0904:另外一個process要進入critical section 10/31 08:40
hunter0904:滿足progress. 10/31 08:40
hunter0904:然後當你一結束 要想再次進入 不是又把turn 給了對方? 10/31 08:41
hunter0904:這樣的話對方就不會一直無限等待 最多只等一次 10/31 08:42
hunter0904:三個條件都有達到 10/31 08:43
hunter0904:我錯了>< 10/31 13:39
sneak: bounded wai https://noxiv.com 08/09 10:49
sneak: //noxiv.com https://daxiv.com 09/11 14:01
sneak: 為什麼沒達到預期的目的 https://noxiv.com 12/15 00:26