假设我们的线程看起来像这样:
线程1:
Lock(mutex) {
//code
if(something)
signal(condition_var);
//code
} //unlocks
线程2:
Lock(mutex) {
//code
while(something)
wait(mutex, condition_var);
//code
} //unlocks
1)假设thread1中的信号被执行,然后在互斥锁解锁之前发生上下文切换。
2)在condition_var上等待的thread2尝试继续,但互斥锁仍然被锁定。现在它会继续等待我猜。假设情境再次发生。
3)thread1现在完成并解锁互斥锁。
如何在thread2中等待,因为任何事情都不会再次发出信号,thread2将如何停止等待?
答案 0 :(得分:0)
当发出条件变量信号时,等待该条件变量的线程将进入尝试重新获取互斥锁然后继续的状态。在此之后不需要再次发信号通知 - 如果互斥锁最终被释放,它将继续(它现在就像它在正常尝试锁定互斥锁一样等待)。 / p>