如何用C语言实现一个长尾词的阻塞队列?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1634个文字,预计阅读时间需要7分钟。
阻塞队列是多线程中常用的数据结构,对实现多线程间的数据交换、同步等有重要作用。常用于生产者和消费者的场景,生产者向队列中添加元素,消费者从队列中取出元素。
阻塞队列是多线程中常用的数据结构,对于实现多线程之间的数据交换、同步等有很大作用。
阻塞队列常用于生产者和消费者的场景,生产者是向队列里添加元素的线程,消费者是从队列里取元素的线程。简而言之,阻塞队列是生产者用来存放元素、消费者获取元素的容器。
考虑下,这样一个多线程模型,程序有一个主线程 master 和一些 worker 线程,master 线程负责接收到数据,给 worker 线程分配数据,worker 线程取得一个任务后便可以开始工作,如果没有任务便阻塞住,节约 cpu 资源。
- master 线程 (生产者):负责往阻塞队列中塞入数据,并唤醒正在阻塞的 worker 线程。
- workder 线程(消费者):负责从阻塞队列中取数据,如果没有数据便阻塞,直到被 master 线程唤醒。
那么怎样的数据结构比较适合做这样的唤醒呢?显而易见,是条件变量,在 c++ 11 中,stl 已经引入了线程支持库。
C++11 中条件变量
条件变量一般与一个 互斥量 同时使用,使用时需要先给互斥量上锁,然后条件变量会检测是否满足条件,如果不满足条件便会暂时释放锁,然后阻塞线程。
本文共计1634个文字,预计阅读时间需要7分钟。
阻塞队列是多线程中常用的数据结构,对实现多线程间的数据交换、同步等有重要作用。常用于生产者和消费者的场景,生产者向队列中添加元素,消费者从队列中取出元素。
阻塞队列是多线程中常用的数据结构,对于实现多线程之间的数据交换、同步等有很大作用。
阻塞队列常用于生产者和消费者的场景,生产者是向队列里添加元素的线程,消费者是从队列里取元素的线程。简而言之,阻塞队列是生产者用来存放元素、消费者获取元素的容器。
考虑下,这样一个多线程模型,程序有一个主线程 master 和一些 worker 线程,master 线程负责接收到数据,给 worker 线程分配数据,worker 线程取得一个任务后便可以开始工作,如果没有任务便阻塞住,节约 cpu 资源。
- master 线程 (生产者):负责往阻塞队列中塞入数据,并唤醒正在阻塞的 worker 线程。
- workder 线程(消费者):负责从阻塞队列中取数据,如果没有数据便阻塞,直到被 master 线程唤醒。
那么怎样的数据结构比较适合做这样的唤醒呢?显而易见,是条件变量,在 c++ 11 中,stl 已经引入了线程支持库。
C++11 中条件变量
条件变量一般与一个 互斥量 同时使用,使用时需要先给互斥量上锁,然后条件变量会检测是否满足条件,如果不满足条件便会暂时释放锁,然后阻塞线程。

