[理工] [OS]用binary sem.定義counting sem.

看板Grad-ProbAsk作者 (Mart)時間11年前 (2015/01/21 17:17), 11年前編輯推噓1(103)
留言4則, 2人參與, 最新討論串1/1
洪逸筆記上的定義是這樣寫的 value=0 代表counting sem.的號誌值 S1=1 ; S2=0 wait(c): wait(S1); value --; if(value<0) then { signal(S1); wait(S2); } else { signal(S1); } signal(c): wait(S1); value++; if(value<=0) then signal(S2); signal(S1); 我的問題是,畢竟他還是用binary在模擬,所以在wait(S2)那邊會卡一堆process 而且S2的值最低也只是0 那只要跑signal(c)一次,卡在wait(S2)的所有process不就一次全部被放出來了嗎? 這樣不就違背要互斥的本意了? 而且value也是不是也不等於卡在wait(c)的值了? 不知道是我想錯還是筆記抄錯了!? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.172.121.165 ※ 文章網址: https://www.ptt.cc/bbs/Grad-ProbAsk/M.1421831821.A.231.html ※ 編輯: GuardmanMart (1.172.121.165), 01/21/2015 17:18:23 ※ 編輯: GuardmanMart (1.172.121.165), 01/21/2015 17:19:39

01/21 18:21, , 1F
被卡住的時候還沒執行wait signal一次救一個wait
01/21 18:21, 1F

01/21 18:23, , 2F
應該說是卡在while迴圈更正
01/21 18:23, 2F

01/21 20:34, , 3F
OK了!
01/21 20:34, 3F

01/21 20:36, , 4F
一時忘記wait內的過程順序 囧
01/21 20:36, 4F
文章代碼(AID): #1KlswD8n (Grad-ProbAsk)