看板 Grad-ProbAsk 關於我們 聯絡資訊
假設有三個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