10.muduo学习笔记之base_BlockingQueue.{h&cc}

本文深入解析muduo库中的无界缓冲区模板类,探讨其生产者消费者模型,以及如何利用条件变量和锁实现线程安全的数据交换。文章详细介绍了类的成员变量和函数,包括构造函数、size()、put()、take()等,并解释了std::move在提高效率上的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 类说明

1. 功能

  • muduo的无界缓冲区,实际是生产者和消费者的问题,这个印象中…后面好像没用到过
  • 这是个模板类

2. 继承

  1. noncopyable

2. 成员变量说明

  1. mutex_
    • muduo锁,没什么可说的了
  2. notEmpty_
    • muduo封装的条件变量
  3. queue_
    • STL中的队列

3. 成员函数说明

1. 普通

  1. 构造函数
    • 变量的初始化,注意条件变量的构造函数需要一个锁变量作为参数
  2. size()
    • 返回队列大小
  3. put(T&)
    • 生产者,把参数加入队列,条件变量notEmpty调用notify()
  4. put(T&&)
    • 和上个函数的区别是这个参数使用的右值引用,加入队列的时候用的std::move()
    • std::move的理解见下
  5. take()
    • 消费者,当队列为空的时候,条件变量等待,直到不为空
    • 取出队列的第一个元素并返回

4. std::move()

  1. 需要先理解左值右值,见这篇博客

  2. std::move()见这篇博客

  3. std::move并不能移动任何东西,它唯一的功能是将一个左值强制转化为右值引用,继而可以通过右值引用使用该值,以用于移动语义。从实现上讲,std::move基本等同于一个类型转换:static_cast<T&&>(lvalue);

  4. C++ 标准库使用比如vector::push_back 等这类函数时,会对参数的对象进行复制,连数据也会复制.这就会造成对象内存的额外创建, 本来原意是想把参数push_back进去就行了,通过std::move,可以避免不必要的拷贝操作。对指针类型的标准库对象并不需要这么做.

  5. std::move是将对象的状态或者所有权从一个对象转移到另一个对象,只是转移,没有内存的搬迁或者内存拷贝。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值