不同线程在同一个condvar上调用pthread_cond_wait()和pthread_cond_timedwait()是否正确?

不同线程在同一个condvar上调用pthread_cond_wait()和pthread_cond_timedwait()是否正确?,c,multithreading,pthreads,C,Multithreading,Pthreads,我试图了解pthread_cond_broadcast()如何工作,以及是否可以将线程“附加”到已被另一个线程阻止的事件(广播信号)的等待列表(或队列) 假设我们有两个线程 等待循环中的线程#1 pthread_mutex_lock(); while(condition_is_false) pthread_cond_wait(); pthread_mutex_unlock(); 以及在线程1已经被阻塞的过程中的某个地方,然后另一个线程2调用相同或几乎相同的代码,希望“附加”到同

我试图了解pthread_cond_broadcast()如何工作,以及是否可以将线程“附加”到已被另一个线程阻止的事件(广播信号)的等待列表(或队列)

假设我们有两个线程

等待循环中的线程#1

pthread_mutex_lock();

while(condition_is_false) 

  pthread_cond_wait(); 

pthread_mutex_unlock(); 

以及在线程1已经被阻塞的过程中的某个地方,然后另一个线程2调用相同或几乎相同的代码,希望“附加”到同一个CODVAR:

pthread_mutex_lock();

while(condition_is_false) 

  pthread_cond_wait(); or pthread_cond_timedwait()

pthread_mutex_unlock(); 
据我所知,线程#2在解锁之前无法访问由互斥锁锁定的代码。我说得对吗


我正在尝试实现下一个案例:有些任务需要一段时间才能完成。在此期间,不允许另一个线程复制已在进行中的同一任务,而是等待该任务完成。当任务最终完成时,所有线程必须得到相同的结果。

您的场景正是为其设计条件变量的场景

第二个线程实现互斥锁没有问题,因为wait(和派生)在wait期间临时释放互斥锁,并在返回时重新获取互斥锁


您应该详细阅读大量文档中有关互斥和条件变量的概念。

谢谢。最后一个问题是混合使用pthread_cond_wait()和pthread_cond_timedwait()调用。在同一个condvar上使用不同的函数正确吗?@user3526517,当然,为什么不正确?