[理工] [OS]-Semaphore

看板Grad-ProbAsk作者 (123)時間16年前 (2010/01/30 18:24), 編輯推噓4(407)
留言11則, 3人參與, 最新討論串1/2 (看更多)
要製作semaphore的 wait(s),signal(s) 需要用到Disable interrupt 和 Enable interrupt 來達到CPU不被搶走的效果 L為一個queue wait(s): singal(s): Disable interrupt Disable interrupt; s.value=s.value+1; s.value=s.value-1; if s.value<=0 then if s.value<0 then { { add process p to s.L remove process Enable interrupt; from s.L Block(p); Wakeup(p); } } Enable interrupt else Enable interrupt 假設一個process1執行wait裡的Enable interrupt,還沒執行到Block(p) 然後突然有一個process2把CPU搶走 執行了 signal裡的 wakeup(p),假如process1是即將要第一個被block住的process 但是process2搶先執行wakeup,那不就沒有救到一個process,一樣有race condition 的問題阿.....我是看洪逸的講義 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.138.111.227 ※ 編輯: gn00618777 來自: 220.138.111.227 (01/30 18:33)

01/30 18:50, , 1F
process2把CPU搶走時候的s.value是多少呢進的去嗎
01/30 18:50, 1F

01/30 18:50, , 2F
我是朝這方面想 討論看看XD
01/30 18:50, 2F

01/30 19:25, , 3F
假設process執行玩是-1,又被process2搶 +1之後為0
01/30 19:25, 3F

01/30 19:25, , 4F
還是可以進去阿
01/30 19:25, 4F

01/30 20:28, , 5F
這是觀念問題 通常WAIT是先執行的 所以一定是一個PROCESS
01/30 20:28, 5F

01/30 20:29, , 6F
通過WAIT進入CS執行再通過SINGAL才會有另一個PROCESS通過
01/30 20:29, 6F

01/30 20:30, , 7F
WAIT 所以不會有你所謂的RACE CONDITION
01/30 20:30, 7F

01/30 20:34, , 8F
而且wait中的enable interrupt完只會block 不會影響其他
01/30 20:34, 8F

01/30 20:34, , 9F
process的執行
01/30 20:34, 9F

01/30 21:31, , 10F
我忽略了wait通常是寫在signal前面了,感謝!!
01/30 21:31, 10F

01/30 21:39, , 11F
加油
01/30 21:39, 11F
文章代碼(AID): #1BP0ZZaZ (Grad-ProbAsk)
文章代碼(AID): #1BP0ZZaZ (Grad-ProbAsk)