Re: [理工] [os] test-and-set 92中原

看板Grad-ProbAsk作者 (阿湯)時間14年前 (2011/09/01 02:14), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
假設有三個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
文章代碼(AID): #1ENdeHVs (Grad-ProbAsk)
文章代碼(AID): #1ENdeHVs (Grad-ProbAsk)