看板 Grad-ProbAsk 關於我們 聯絡資訊
※ 引述《mqazz1 (無法顯示)》之銘言: : 用下面這個演算法來實作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; : 這個時候演算法就沒辦法達到預期的目的 : 請問是什麼原因呢? 我的想法是 如果先對turn值作改變 也就是把1.2互換的話 會有一個情況就是 process尚未表明自己是否想進入CS 就去搶奪turn 這樣之下 假若先進入的process是因為另一個process不想進入而進入CS 則原先不想進CS的procese已經佔有優勢 因為他在沒有意願的情況下就先搶到了turn 這樣在他想進入CS時 自然沒有人可以阻擋他 因為進入的條件是 對方沒意願或是對方沒拿到turn (我大膽猜測 Peterson 這個解法是希望procese在表明意願後 才去對turn做搶奪) 有錯請指正! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.251.226.206
sallet:唔 可是就算他在沒意願的情況下就搶到turn 在他有意願時 10/31 08:41
sallet:他還是得先把turn交給對方啊? 在原本演算法的也是這樣吧? 10/31 08:42
sallet:喔我好像懂你的意思了 我用用看流程~ 10/31 09:50