signal()和wait()在信号量算法中做什么?

时间:2019-01-31 15:26:45

标签: semaphore pseudocode

signal()和wait()是否在信号量算法中执行? 我知道其中一个执行S ++,另一个执行S--,但是我不确定哪个执行该操作。我已经检查了信号算法,似乎表明信号使计数器降至0。

1 个答案:

答案 0 :(得分:0)

条件变量是带有signalwait的变量。

当您希望线程等待直到满足特定条件时,将使用条件变量。

while(!canProceed) { cond.wait(); }

当另一个线程想要解除阻塞这些被阻塞的线程时,它仅调用signal(解除阻塞一个)或broadcast(解除阻塞所有)。

canProceed = true
cond.broadcast()

信号量只是mutex的概括。尽管mutex允许在给定的关键节内使用一个线程,而semaphores允许在内部N个线程中使用。

最初通过线程wait进入关键部分;完成后,就post(至少使用pthreads API)。

semaphore.wait();
do_stuff();
semaphore.post();