首页 > 代码库 > pthread_cond_broadcast用处
pthread_cond_broadcast用处
以前学习POSIX THREAD时就不太理解broadcast在什么场景下使用比较合适。因为broadcast的语义是唤醒所有被阻塞的线程。
当时的想法是,在系统析构时调用它比较有效,唤醒阻塞的线程,回收线程资源,然后退出系统。
今天在做 lock_server 时,才了解到broadcast的用处,它的效果是,减少系统中条件变量的个数
需求
系统中有很多锁,锁有FREE和LOCKED两种状态。不同的client会申请自己需要的锁,server响应client的申请。假如client申请的锁已被占用,那么client应该阻塞,等待锁被释放。
设计1
client阻塞在它需要的那个锁上,应该是pthread_cond_wait(&lockid, &mutex)
这样设计的话,对于每一个锁,都需要一个对应的条件变量,这样设计增加了系统的复杂性
设计2 应用broadcast
系统中设置一个共享的条件变量 cond,所有的线程阻塞在cond上
?
1 2 3 4 | while (lock_status_[lid] == LOCKED) { pthread_cond_wait(&c_, &m_); } pthread_cond_broadcast(&c_); |
这样,一旦某个锁被释放,所有的阻塞线程都会被唤醒,但唯有阻塞在这个锁的线程才能真正被唤醒。
另外,mutex的使用,保证了最多一个线程被真正唤醒,即便是broadcast。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。