当 thread1 发出信号时,等待条件的 thread2 如何唤醒,而 mutex(common) 仍被 thread1 锁定?

How will thread2, waiting on a condition, wake, when signalled from thread1, while mutex(common) is still locked by thread1?

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

线程 1:

Lock(mutex) {
    //code
    if(something)
        signal(condition_var);
    //code
} //unlocks

线程 2:

Lock(mutex) {
    //code
    while(something)
        wait(mutex, condition_var);
    //code
} //unlocks

1) 假设线程1中的信号被执行,然后上下文切换发生在互斥锁解锁之前。

2) 正在等待 condition_var 的线程 2 尝试继续,但互斥量仍处于锁定状态。我猜现在它会继续等待。假设上下文再次发生。

3) thread1 现在完成并解锁互斥体。

线程 2 中的等待现在将如何表现,因为任何东西都不会再次发出信号,线程 2 将如何停止等待?

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