Re: [理工] [OS]-synchronization

看板Grad-ProbAsk作者 (風姿)時間13年前 (2010/10/31 10:15), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串1/1
為了方便了解我複製程式碼對照到Process j 指令前的編號是執行順序 進入critical section的條件是對方的flag值為false 或 turn不為對方 Process i Process j -------------------------------- -------------------------------- 1 turn = j; 2 turn = i; 5 flag[i] = TRUE; 3 flag[j] = TRUE; 6 while (flag[j] && turn == j); 4 while (flag[i] && turn == i) ; {critical section} {critical section} flag[i] = false; flag[j] = false; {remainder section} {remainder section} -------------------------------- -------------------------------- 首先從step.1執行到step.4 經過這些程序後turn值為i (因為step.2後執行) 而此時因為flag[i]尚未指定為true 所以flag[i]為false (初值) 因此Process j可以進入critical section 再來執行step.5和step.6 在while loop中 雖然flag[j]為true 但turn值沒有被變動仍然為i 因此Process i一樣可以進入critical section 所以違反mutual exclusion 有錯麻煩指正~謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 112.104.103.14

10/31 10:53, , 1F
我也是這麼想的:)
10/31 10:53, 1F

10/31 13:44, , 2F
我原本想錯了 你解說的很詳細 謝謝
10/31 13:44, 2F
文章代碼(AID): #1CpD5P6b (Grad-ProbAsk)