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)
a の実行を停止した場合thread
、どのように、どこで、いつ戻るのでしょうか?
次の割り込みを有効にするスレッドはどれWait()
ですか? thread
呼び出された は、block()
別のスレッドが呼び出されるまで返されるべきではありませんwakeup(thread)
!
- しかし、その他のスレッドはどのように実行されるのでしょうか?
- スレッドの切り替えは正確にどこで行われますか?