关于下面的代码,我的理解是线程1抓住锁,检查条件,解锁时钟,将自己设置为睡眠状态。之后,线程2声明相同的锁定和增加计数,然后唤醒睡眠线程。我的问题是,现在的情况仍然是错误的,但它唤醒了睡眠线程,会发生什么?而条件变量也是一组线程,所以如果有很多线程同时执行代码,wait()如何处理这种情况呢?最后请解释一下这段代码的正确执行顺序,非常感谢!关于pthread_cond_wait的困惑
thread 1:
pthread_mutex_lock(&mutex);
while (!condition)
pthread_cond_wait(&cond, &mutex);
/* do something that requires holding the mutex and condition is true */
pthread_mutex_unlock(&mutex);
thread2:
while(1){
pthread_mutex_lock(&mutex);
count++;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
}
你认为'while(!condition)'做什么?只要条件不成立,线程1将继续重新运行while循环的主体,即它将一直等待该条件。 – immibis
@immibis第二次解锁是做什么的?只需解锁锁wait()返回? –
第二次解锁? – immibis