推 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