当thread1(公共)仍然被thread1锁定时,thread2在等待条件时如何唤醒,从thread1发出信号?

时间:2015-12-17 12:20:19

标签: multithreading pthreads

假设我们的线程看起来像这样:

线程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将如何停止等待?

1 个答案:

答案 0 :(得分:0)

当发出条件变量信号时,等待该条件变量的线程将进入尝试重新获取互斥锁然后继续的状态。在此之后不需要再次发信号通知 - 如果互斥锁最终被释放,它将继续(它现在就像它在正常尝试锁定互斥锁一样等待)。 / p>