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)
停止 athread
执行,它如何、在何处以及何时返回?
哪个线程在 ? 之后启用中断Wait()
?在另一个线程调用之前thread
,被调用的block()
不应该返回wakeup(thread)
!
- 但是其他线程如何运行?
- 线程切换到底发生在哪里?