[理工] [OS]-Semaphore
要製作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
01/30 18:50, 1F
→
01/30 18:50, , 2F
01/30 18:50, 2F
→
01/30 19:25, , 3F
01/30 19:25, 3F
→
01/30 19:25, , 4F
01/30 19:25, 4F
推
01/30 20:28, , 5F
01/30 20:28, 5F
→
01/30 20:29, , 6F
01/30 20:29, 6F
→
01/30 20:30, , 7F
01/30 20:30, 7F
推
01/30 20:34, , 8F
01/30 20:34, 8F
→
01/30 20:34, , 9F
01/30 20:34, 9F
→
01/30 21:31, , 10F
01/30 21:31, 10F
推
01/30 21:39, , 11F
01/30 21:39, 11F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):