作者christianSK (AG)
看板Grad-ProbAsk
標題Re: [理工] [OS] synchronization
時間Sat Oct 30 20:30:10 2010
※ 引述《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