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)
が実行されていない場合、どのように、どこから、いつ戻ってくるのですか?ウェイト/シグナル(セマフォ)実装の擬似コードはどのように「動作しますか」?
に続く割り込みを許可するスレッドはどれですか? block()
と呼ばれるthread
は、別のスレッドがwakeup(thread)
を呼び出すまで返さないでください。
- 他のスレッドはどのように実行されますか?
- スレッドスイッチはどこで正確に行われますか?
このコードはどこから来たのですか? –
講義スライドから... http://web.cecs.pdx.edu/~walpole/class/cs333/fall2006/slides/5.ppt –