Re: [理工] [OS]-synchronization
為了方便了解我複製程式碼對照到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