[理工] [OS] synchronization

看板Grad-ProbAsk作者 (無法顯示)時間15年前 (2010/10/30 20:15), 編輯推噓3(3011)
留言14則, 2人參與, 7年前最新討論串1/5 (看更多)
用下面這個演算法來實作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

10/31 08:35, , 1F
為什麼沒達到預期的目的? mutual exclusion,progress,
10/31 08:35, 1F

10/31 08:36, , 2F
bounded waiting感覺都有?? 只是執行的順序可能受影響
10/31 08:36, 2F

10/31 08:38, , 3F
turn 一個時間只有一個值 就有mutual exclu
10/31 08:38, 3F

10/31 08:39, , 4F
當你一個process執行完之後 waiting變成false.
10/31 08:39, 4F

10/31 08:39, , 5F
他沒有意願參予critical section的選擇 也沒有影響到
10/31 08:39, 5F

10/31 08:40, , 6F
另外一個process要進入critical section
10/31 08:40, 6F

10/31 08:40, , 7F
滿足progress.
10/31 08:40, 7F

10/31 08:41, , 8F
然後當你一結束 要想再次進入 不是又把turn 給了對方?
10/31 08:41, 8F

10/31 08:42, , 9F
這樣的話對方就不會一直無限等待 最多只等一次
10/31 08:42, 9F

10/31 08:43, , 10F
三個條件都有達到
10/31 08:43, 10F

10/31 13:39, , 11F
我錯了><
10/31 13:39, 11F

08/09 10:49, , 12F
bounded wai https://noxiv.com
08/09 10:49, 12F

09/11 14:01, , 13F
//noxiv.com https://daxiv.com
09/11 14:01, 13F

12/15 00:26, 7年前 , 14F
為什麼沒達到預期的目的 https://noxiv.com
12/15 00:26, 14F
文章代碼(AID): #1Cp0ne1d (Grad-ProbAsk)
文章代碼(AID): #1Cp0ne1d (Grad-ProbAsk)