看板 Grad-ProbAsk 關於我們 聯絡資訊
int Test_and_Set (int *Target) { int temp; temp = *Target; T2:*Target = 1; return temp; } while (Test_and_Set(Lock)) do no no-op; C.S. T1:Lock = False; R.S. 為什麼此程式符合(2) progress 假設有兩程式pi,pj pi先進入cs出來時改Lock為Fasle 但T2:pj將Lock再改成1(True 這樣不就DL了? 請問我邏輯哪裡錯誤呢 -- ◆ From: 140.120.82.1
Bearcome:回傳的不是Lock的舊值(temp)嗎? 12/10 14:08
但是*Target = 1應該會更改Lock值為True吧,不然pi是怎麼更改的
Bearcome:會改lock啊 但回傳test and set為false啊 12/10 15:18
那請問T1執行完執行T2,雖然回傳是FALSE,但Pj還是無法進入形成Deadlock 請問我思考邏輯哪裡錯呢@@想不通
Bearcome:While測的是test and set這個函式是1 or 0不是測lock喔 12/10 15:28
有點搞糊塗了,Lock=Flase test-and-set就會回傳0,解開no-op不是嗎 當T1執行完立刻執行T2,while會一直nop(Lock=True),無法進入C.S.?
Bearcome:Test and set好像要保證不能被中斷 理應不會卡在T2才對 12/10 16:16
沒有中斷,是PI跟PJ同時LOCK=FALSE的狀況會出現嗎
monkeyleo:pi出來改Lock為F不就表示pj可以進去了嗎@@ 12/10 20:09
我是假設此時pj正在執行T2
monkeyleo:pj進去之後改Lock為T防止pi這時如果也又想進來會DL 12/10 20:10
monkeyleo:原PO大在推文中說的情況應該是pi出來又馬上想進去且又搶 12/10 20:11
monkeyleo:到 而造成pj一直等而可能starvation吧 12/10 20:12
monkeyleo:應該是不符合bounded waiting吧 個人淺見 請指教@@ 12/10 20:13
不符合bounded waiting是正確的,只是我不知道為什麼不會有DL ※ 編輯: jas1123kimo 來自: 123.241.31.40 (12/11 01:08)
Bearcome:我是覺得不會耶 不然他那個atomic execute就變得毫無意義 12/11 01:17
Bearcome:他應該是有個機制是讓T&S做完 其他process才能繼續執行 12/11 01:26
Bearcome:只是沒有顯示在程式上 我猜的啦 12/11 01:26
jas1123kimo:我查了很久,test-and-set是spinlock, 12/11 02:02
jas1123kimo:我在問學校教授好了...想了三小時,OS原文231-234五次 12/11 02:03
jas1123kimo:都還是不懂 12/11 02:03
jas1123kimo:感謝熊來^^ 12/11 02:03
kiwidoit:test-and-set()是atomically execute,不會發生你講的狀 12/18 02:12
kiwidoit:況 12/18 02:12