普通双锁队列, 当判断是不是首尾相同时(即队列是不是为空),还是会 既加头锁又加尾锁。好在有聪明人早在96年就想到了一个更妙的算法。这个算法也是用了head和tail两个锁,但是它有一个关键的地方是它在队列初始化的时候head和tail指针不为空,而是指向一个空节点。在enqueue的时候只要向队列尾部添加新节点就好了。而dequeue的情况稍微复杂点,它要返回的不是头节点,而是head->next,即头节点的下一个节点。
此方法参考http://www.parallellabs.com/2010/10/25/practical-concurrent-queue-algorithm/
下面是我参考https://blog.csdn.net/mymodian9612/article/details/53608084?utm_source=blogxgwz1
修改的简单C++(Linux也可用)高并发安全队列
#ifndef __THREADSAFE_QUEUE2_H_
#define __THREADSAFE_QUEUE2_H_
#include <mutex>
#include <memory>
#include <functional>
#include <condition_variable>
template <typename T>
cla