Multithreading Multile pthread_cond_wait唤醒并保持互斥锁

Multithreading Multile pthread_cond_wait唤醒并保持互斥锁,multithreading,pthreads,Multithreading,Pthreads,根据手册页,pthread_cond_broadcast唤醒所有等待条件变量(condvar)的线程。这些被唤醒的线程将保留互斥锁,并从pthread\u cond\u wait返回 但让我困惑的是:互斥锁不应该同时由一个线程持有吗 提前感谢。条件变量的工作方式如下: /* Lock a mutex. */ pthread_mutex_lock(&mtx); /* Wait on condition variable. */ while (/* condition *.) pt

根据手册页,pthread_cond_broadcast唤醒所有等待条件变量(condvar)的线程。这些被唤醒的线程将保留互斥锁,并从pthread\u cond\u wait返回

但让我困惑的是:互斥锁不应该同时由一个线程持有吗


提前感谢。

条件变量的工作方式如下:

/* Lock a mutex. */
pthread_mutex_lock(&mtx);

/* Wait on condition variable. */
while (/* condition *.)
    pthread_cond_wait(&cond, &mtx);

/* When pthread_cond_wait returns mtx is atomically locked. */

/* ... */

/* Unlock the mutex. */
pthread_mutex_unlock(&mtx);

因此,需要理解的要点是,在发送广播时,许多线程都可以醒来,但是只有一个线程会“赢得”比赛,并实际锁定mtx,退出循环。

cnicutar:这意味着只有一个线程会从pthread\u cond\u wait()返回,其他线程将保持阻塞状态。我说得对吗?@Martin:很清楚,每次只有一个线程从
pthread\u cond\u wait()
调用(保存互斥锁的调用)返回。当释放互斥锁时,其他的将(一个接一个)返回。它们是否退出
while
循环取决于第一个(或后续)线程是否将条件保持为true或将rest设置为false。