科技常识:浅谈Linux条件变量的使用

2021-04-10 20:28:11
导读今天小编跟大家讲解下有关科技常识:浅谈Linux条件变量的使用,相信小伙伴们对这个话题应该也很关注吧,小编也收集到了有关科技常识:浅谈L

今天小编跟大家讲解下有关科技常识:浅谈Linux条件变量的使用,相信小伙伴们对这个话题应该也很关注吧,小编也收集到了有关科技常识:浅谈Linux条件变量的使用的相关资料,希望小伙伴会喜欢也能够帮助大家。

Linux线程同步之间存在多种机制,条件变量是一种类似操作系统里提到的生产者-消费者算法的同步机制,允许线程以无竞争的方式等待特定条件的发生。

示例伪代码:

void* Thread1(void){ while(线程运行条件成立){ … pthread_mutex_lock(qlock); while(条件成立)pthread_cond_wait(qcond,qlock);或者pthread_cond_wait(qcond,qlock,timeout); reset条件变量… pthread_mutex_unlock(qlock); }}void* Thread2(void){ while(线程运行条件成立){ … pthread_mutex_lock(qlock); set了条件变量…//可以发送处理信号 pthread_cond_signal(qcond); 或者 pthread_cond_broadcast(qcond); pthread_mutex_unlock(qlock); }}

条件变量需要配合互斥量一起使用,互斥量作为参数传入wait函数,函数把调用线程放到等待条件的线程列表上,然后对互斥量解锁,这两个是原子操作。当线程等待到条件,从wait函数返回之前,会再次锁住互斥量。

1.Lock 2.Unlock 3.等待 4.Lock 5.Unlock

第2,3,4步是wait的内部操作

在wait被唤醒后,还需要在while中去检查条件,这是为了防止“惊群效应”,比如有两个线程同时阻塞在wait,先后醒来,快的线程做完处理然后把条件reset了,并且对互斥量解锁,此时慢的线程在wait里获得了锁(即第4步)返回,还再去做处理就会出问题。

以上就是小编为大家带来的浅谈Linux条件变量的使用全部内容了,希望大家多多支持爱蒂网~

来源:爱蒂网

免责声明:本文由用户上传,如有侵权请联系删除!

猜你喜欢

最新文章