Re: [理工] [OS] synchronization
※ 引述《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
推
10/31 08:41, , 1F
10/31 08:41, 1F
→
10/31 08:42, , 2F
10/31 08:42, 2F
推
10/31 09:50, , 3F
10/31 09:50, 3F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 5 篇):