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)!
- 但是其他线程如何运行?
- 线程切换到底发生在哪里?