当前位置: 技术问答>linux和unix
在linux7.3下多个线程使用 pthread_cond_t 的一个小问题。
来源: 互联网 发布时间:2015-07-11
本文导语: 当我用两个线程,一个调用pthread_cond_wait,另一个调用pthread_cond_singnal 没有问题。 但是同样的代码 pthread_mutex_lock(&m_lock) pthread_cond_wait(&m_cond,&m_lock) pthread_mutex_unlock(&m_lock) 我期望是两个线程都会睡觉,结果是 同时被两...
当我用两个线程,一个调用pthread_cond_wait,另一个调用pthread_cond_singnal
没有问题。
但是同样的代码
pthread_mutex_lock(&m_lock)
pthread_cond_wait(&m_cond,&m_lock)
pthread_mutex_unlock(&m_lock)
我期望是两个线程都会睡觉,结果是
同时被两个以上的线程调用就会出现线程被唤醒的情况,难道只支持一个线程wait吗?
那么pthread_cond_broadcast()这个函数说的激放所有的等待线程有是怎么回是?
又要meutex有何用?
没有问题。
但是同样的代码
pthread_mutex_lock(&m_lock)
pthread_cond_wait(&m_cond,&m_lock)
pthread_mutex_unlock(&m_lock)
我期望是两个线程都会睡觉,结果是
同时被两个以上的线程调用就会出现线程被唤醒的情况,难道只支持一个线程wait吗?
那么pthread_cond_broadcast()这个函数说的激放所有的等待线程有是怎么回是?
又要meutex有何用?
|
to gettext(冰雪之崖)
如果保护的是同一个临界区,用两个mutex如何起到保护作用啊?
pthread_cond_wait本来就会出现假唤醒的情况,因此应该在一个循环里去不断的检查条件并调用。
while(!condition)
pthread_cond_wait(...);
多个线程同时等待一个条件,用pthread_cond_broadcast会安全一些,因为你不会漏掉任何一个在等待的线程。broadcast是指向所有的在等待的线程发通知,但只要加上了上面的循环检查,实际被唤醒的只可能有一个。
如果保护的是同一个临界区,用两个mutex如何起到保护作用啊?
pthread_cond_wait本来就会出现假唤醒的情况,因此应该在一个循环里去不断的检查条件并调用。
while(!condition)
pthread_cond_wait(...);
多个线程同时等待一个条件,用pthread_cond_broadcast会安全一些,因为你不会漏掉任何一个在等待的线程。broadcast是指向所有的在等待的线程发通知,但只要加上了上面的循环检查,实际被唤醒的只可能有一个。
|
在多个线程被唤醒时,需要重新获得m_lock锁才行,因此只有一个线程能够得到锁并从pthread_cond_wait中返回。
|
对,不同的pthread应该用不同的m_lock。
|
不同的线程用不同的mutex看看呢?
|
学习,刚学Linux,学习呀!
以前一直是窗户的!
以前一直是窗户的!
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。