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
的{{1}}在另一个线程调用block()
之前不应该返回!
答案 0 :(得分:1)
block(thread)
就是这样:
wakeup(thread)
。这意味着在这一点thread
产生了它到调度程序的时间。答案 1 :(得分:0)
是的, UP 和 DOWN 在从不同的线程调用时非常有用,但是用一个线程调用它们并非不可能 - 如果你用一个线程启动信号量值&gt; 0,然后相同的线程可以进入临界区并执行DOWN(之前)和UP(之后)。初始化信号量的值告诉一次有多少线程可以进入临界区,可能是1(互斥)或任何其他正数。
如何创建线程?这不会在演讲幻灯片中显示,因为这只是信号量如何使用伪代码的原理。但是,如何在应用程序中使用这些信号量是一个完全不同的故事。