Wait(semaphore sem) {
DISABLE_INTS
sem.val--
if (sem.val < 0){
add thread to sem.L
block(thread)
}
ENABLE_INTS
Signal(semaphore sem){
DISABLE_INTS
sem.val++
if (sem.val <= 0) {
th = remove next
thread from sem.L
wakeup(th)
}
ENABLE_INTS
如果block(thread)
停止thread
執行,它如何返回,何處,何時返回?等待/信號(信號量)如何實現僞代碼「工作」?
哪個線程在Wait()
之後啓用中斷? thread
調用block()
應該不會返回,直到另一個線程調用wakeup(thread)
!
- 但是其他線程如何運行?
- 線程切換髮生在哪裏?
此代碼從何而來? – 2012-03-16 21:04:38
從演講幻燈片... http://web.cecs.pdx.edu/~walpole/class/cs333/fall2006/slides/5.ppt – 2012-03-16 21:14:39