假設有三個process A T 平行執行 然後 lock = false
B T
C T
waiting[i] = true;
key = true;
// 跑到while的時候 設A 搶到lock 跑進 Critical section
// 這時 process wait
// B T key = true 一直在while 換key換得很開心
// C T ↑
┌----------------┘
while(waiting[i] and key) do key = test-and-set(lock); ←┐
waiting[i] = false; │
CRITICAL SECTION │
j=i+1 mod n; │
while ((j<>i) and (not waiting[j])) doj=j+1 mod n; │
// 這時候的狀態 │
// index wait │
// i → A F lock = true │
// j → B T │
// C T │
// 跳出迴圈之後 如果 B wait[] 沒有改false 他會跟C 繼續卡在–┘
if j=i then ← 如果沒人要進去鑰匙就直接丟出來就行了
lock=false;
else waiting[j]=false;
做這個做好久-.-
有問題幫忙更正一下巴 感恩~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.116.112.107