class BlockingQueue 是线程安全的阻塞队列,(生产者消费者模式)
-
函数:
构造函数初始化队列大小,kInfiniteQueueSize=0默认不限制容量。queue_size限制容量:通过条件变量做到.
不可拷贝不可赋值
Push() :添加元素,容量不够时,阻塞等待
Pop() :删除元素,没有元素时,阻塞等待
Peek() :返回下一个应该弹出的元素
PushWithTimeout() :添加元素, 若超时则返回false
PopWithTimeout() :删除元素,若超时则返回false
- 参数:
- absl::Mutex mutex_; 队列数据线程锁,保证队列多线程安全
- const size_t queue_size_ ; 队列大小
- std::deque
deque_; // https://zh.cppreference.com/w/cpp/container/deque
carto 代码引用说明:
BlockingQueue —> OrderedMultiQueue( 用来存储传感器信息 )
小贴士:
1.const 和 constexpr
const 所定义的变量,一经初始化便不能修改,但是不要求const所定义变量在编译的时候就能被算出。
constexpr 定义的变量要求,变量在程序被编译的时候就能被判定为常量,否则出错。
总结来说,constexpr 定义的变量“常量的属性” 比const 所定义的变量更彻底(这是我自己的语言)
2.std::deque
( double-ended queue ,双端队列)是有下标顺序容器,它允许在其首尾两段快速插入及删除。另外,在 deque 任一端插入或删除不会非法化指向其余元素的指针或引用。
https://zh.cppreference.com/w/cpp/container/deque
- push_back() 末尾插入元素
- push_back() 启始插入元素
- pop_back() 移除末尾元素
- pob_front() 移除启始元素
- front() 访问启始元素
- back() 访问末尾元素
- front().get() 启始元素指针
3.size_t 和int 区别:
size_t是一些C/C++标准在stddef.h中定义的。这个类型足以用来表示对象的大小。size_t的真实类型与操作系统有关。
在32位架构中被普遍定义为:
typedef unsigned int size_t;
而在64位架构中被定义为:
typedef unsigned long size_t;
在表示大小的时候,,往往用 size_t ,不用int