signal()和wait()是否在信号量算法中执行? 我知道其中一个执行S ++,另一个执行S--,但是我不确定哪个执行该操作。我已经检查了信号算法,似乎表明信号使计数器降至0。
答案 0 :(得分:0)
条件变量是带有signal
和wait
的变量。
当您希望线程等待直到满足特定条件时,将使用条件变量。
while(!canProceed) { cond.wait(); }
当另一个线程想要解除阻塞这些被阻塞的线程时,它仅调用signal
(解除阻塞一个)或broadcast
(解除阻塞所有)。
canProceed = true
cond.broadcast()
信号量只是mutex
的概括。尽管mutex
允许在给定的关键节内使用一个线程,而semaphores
允许在内部N
个线程中使用。
最初通过线程wait
进入关键部分;完成后,就post
(至少使用pthreads
API)。
semaphore.wait();
do_stuff();
semaphore.post();