【多线程篇】【thread】【生产者和消费者模型】

系列文章目录

可跳转到下面链接查看下表所有内容https://blog.youkuaiyun.com/handsomethefirst/article/details/138226266?spm=1001.2014.3001.5501文章浏览阅读2次。系列文章大全https://blog.youkuaiyun.com/handsomethefirst/article/details/138226266?spm=1001.2014.3001.5501


目录

系列文章目录

1.简介

1.1 作用

1.2 流程图

2.主要方法

2.1 std::thread构造函数

2.2  detach

2.3  std::condition_variable.wait

2.4 notify

3.如何使用?


1.简介

生产者和消费者之间不直接进行交互,而是通过一个缓冲区进行交互,生产者生产数据,然后存入缓冲区,消费者负责从缓冲区取出数据并消费数据。

1.1 作用

1.解决生产者和消费者之间的强藕合关系。即:生产者和消费者之间不直接进行交互。

2.充分发挥cpu的能力,比如A生产数据的能力很快,但是B消费数据能力慢,那么A就得等到B消费完才能生产下一个,浪费A快速生产数据的能力,如果中间放一个缓冲区,那么A就不用等待B消费完,就可以生产数据了。

1.2 流程图

2.主要方法

2.1 std::thread构造函数

std::thread mthread(&ComsumerThread::eventLooper, this);
//创建一个线程对象,线程创建出来会执行ComsumerThread::eventLooper函数,this是传递给ComsumerThread::eventLooper函数的参数,因为类的成员函数,会隐含一个参数,指向接受消息的对象。

2.2  detach

分离线程,将当前线程对象与该线程对象分离,是的线程可以单独执行,与之关联的std::thread对象失去对目标线程的关联,无法再通过std::thread对象取得该线程的控制权,一旦线程执行完毕,它分配的资源会被释放。

2.3  std::condition_variable.wait

wait(unique_lock <mutex>&lck)
1.函数一:当前线程的执行会被阻塞,直到收到 notify 为止。
2.wait(unique_lock <mutex>&lck,Predicate pred)
函数二:当前线程仅在pred=false时阻塞;如果pred=true时,不阻塞。

条件变量的wait函数,首先会接收一个加锁的变量,在线程被阻塞时,该函数会释放锁,让其他线程获取锁,然后等待别的线程notify唤醒锁,被唤醒后,

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值