系列文章目录
目录
2.3 std::condition_variable.wait
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唤醒锁,被唤醒后,

https://blog.youkuaiyun.com/handsomethefirst/article/details/138226266?spm=1001.2014.3001.5501
最低0.47元/天 解锁文章
688

被折叠的 条评论
为什么被折叠?



