thread_safe_queue.cpp 1.7 KB

12345678910111213141516171819202122232425262728293031323334
  1. /*
  2. * (1)这个实现要求构建工具支持C++11的atomic std::mutex condition_veriable功能。这是C++11的基础特性,一般2011年以后的C++编译器都能支持。 例如,visual studio 2012以上。
  3. (2)这个类的实现中有两处使用了unique_lock而不是lock_guard,这是data_cond.wait所需要的,unique_lock是lock_guard的增强版。
  4. 通过std::move的使用(前提是我们实现的类型T定义了移动构造函数和移动赋值函数),能利用移动语义带来的性能优势。
  5. 使用shared_ptr<T>返回元素,用户无需释放元素的内存。
  6. 原文链接:https://blog.csdn.net/weixin_41855721/article/details/81703818
  7. 引用了他的思路,增加了一些功能函数, 补充了注释说明
  8. termination_queue
  9. // 在退出状态下,所有的功能函数不可用,返回false或者null。
  10. // wait_and_pop不会阻塞。让其直接通过,通过后直接return,不允许做其他的。
  11. pop系列函数
  12. //(1)没有调用termination时,每调用一次出队一个元素,直到队列为空本方法阻塞线程。
  13. //(2)在调用了termination后,本方法永不阻塞,如果原本已经处于阻塞状态,解除阻塞状态。
  14. //(3)返回true时,value值有效。返回false时,value值无效。调用了termination且队列为空时返回false.
  15. 注注注注注意了:模板类不支持分离编译。 模板类的实现必须放在头文件
  16. 为了方便阅读和编程规范,依然将声明和实现分开,就像是把cpp文件的代码复制到h文件的尾部。
  17. 如果将实现放到cpp里面,那么就要为cpp文件加 ifndef define endif
  18. 然后在调用方include包含cpp文件,但是这样不好。
  19. * */
  20. #include "thread_safe_queue.h"