看板 Grad-ProbAsk 關於我們 聯絡資訊
想問的是使用此指令在design criticl section時, 恐龍的部分程式碼如下, do{ waiting[i] = True; key = True; while ( waiting[i] && key ) key = TestAndSet(&lock); C.S. j = ( i+1 ) % n; while ( j != i && !waiting[j] ) j = ( j+1 ) % n; if ( j = = i ) lock = False; else waiting[j] = False; R.S }while(true); 第三行到第五行為何不能簡寫成如下呢? while(waiting[i] && TestAndSet(&lock)) do no-ip 不了解為什麼要用一個key去接他的值。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.228.111.134 ※ 文章網址: http://www.ptt.cc/bbs/Grad-ProbAsk/M.1419426459.A.260.html ※ 編輯: galapous (36.228.111.134), 12/24/2014 21:09:38 ※ 編輯: galapous (36.228.111.134), 12/24/2014 21:10:05
A4P8T6X9: 為了讓人覺得有拿到 key? 12/24 21:30
coilion9670: 個人淺見不知道對不對 12/25 03:34
coilion9670: while判斷時中呼叫副程式再傳回這樣花的時間比較久 12/25 03:35
coilion9670: 當有process卡在while中無法進入臨界區間就會一直 12/25 03:36
coilion9670: call副程式,如果寫在while判斷後就可以避免此時間的 12/25 03:37
coilion9670: 浪費 12/25 03:37
coilion9670: call副程式還有可能有搶資源的情形,能避免應該會是 12/25 03:44
coilion9670: 一大助益 12/25 03:44
galapous: 但照原本那樣寫也是每個while會call一次test-and-set不 12/25 09:17
galapous: 是嗎? 12/25 09:17
kkk99512: 這份Code在出口段的地方是不是有避免Starvation的動作? 12/25 18:07
kkk99512: 如果是的話,因為要做環狀的檢查,然後指定下一個進入 12/25 18:07
kkk99512: C.S的Process,才會在入口段的地方加入這些條件 12/25 18:08
galapous: 出口有在沒process想進來時把lock設成false,完全沒動到 12/25 18:52
galapous: key,所以才想說為啥不能省略掉 12/25 18:52
kkk99512: 就是說出口地方,會指定下一個進C.S的程式是誰,不改Key 12/25 19:21
kkk99512: 因為如果改到Key的話,會造成大家一起搶Key 12/25 19:22
kkk99512: 如果有一隻很衰一直搶不到,就違反Bounded-waiting了 12/25 19:22
kkk99512: 這樣可以在保持Key不變的狀況下,指定某隻程式接續執行 12/25 19:28
qoojordon: kkk的解釋蠻好der , 受教惹 , 謝謝你 12/25 19:38
galapous: 如果多個process想進入的話下面是改waiting變成false 12/25 20:21
galapous: 假設現在process i從c.s.出來,那只有從i開始檢查一輪到 12/25 20:22
galapous: process i-1都沒人想進去,才會改lock成false,這樣應該 12/25 20:23
galapous: 沒有bounded-waiting問題吧?因為沒人想進等於重新開始? 12/25 20:24
galapous: 還是我哪邊想錯了QQ 12/25 20:24
補上完整程式碼 ※ 編輯: galapous (36.228.111.134), 12/25/2014 20:31:20
qoojordon: bounded waiting有錯是發生在入口,原先有key的寫法我 12/25 20:32
qoojordon: 更正 , 這份程式後半段和Peterson不同,我誤會惹 12/25 21:00
kkk99512: 我想我了解您的意思了,一下子沒有看清楚 不好意思 12/25 21:27
kkk99512: 而且我開始覺得您說得好像有點道理 12/25 21:27