时间:2021-05-19
本文给出一种C++无锁队列的实现代码,主要用于一个线程读取数据另外一个线程写数据
复制代码 代码如下:
#ifndef LOCK_FREE_QUEUE_H_
#define LOCK_FREE_QUEUE_H_
//不加锁队列,适合一个线程读取,一个线程写
#include <list>
template <typename T>
class LockFreeQueue
{
public:
LockFreeQueue()
{
list.push_back(T());//分割节点
iHead = list.begin();
iTail = list.end();
};
void Produce(const T& t) //存消息
{
list.push_back(t);
iTail = list.end();
list.erase(list.begin(), iHead);
};
bool Consume(T& t) //取消息
{
typename TList::iterator iNext = iHead;
++iNext;
if (iNext != iTail)
{
iHead = iNext;
t = *iHead;
return true;
}
return false;
};
bool Peek(T& t) //查看消息不删除
{
typename TList::iterator iNext = iHead;
++iNext;
if (iNext != iTail)
{
t = *iNext;
return true;
}
return false;
}
bool IsEmpty()
{
typename TList::iterator iNext = iHead;
++iNext;
if (iNext != iTail)
{
return false;
}
else
{
return true;
}
}
int GetMaxSize()
{
return list.max_size();
};
private:
typedef std::list<T> TList;
TList list;
typename TList::iterator iHead, iTail;
};
#endif
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
双向链表C++的实现本文是通过C++的知识实现数据结构中的双向链表,这里不多说了,代码注释很清楚,实现代码://doubleLinkListimplementw
C++实现队列,如有不足之处,还望指正复制代码代码如下://MyQueue.cpp:定义控制台应用程序的入口点。//实现链式队列(queue),包括一个头结点。
C++模拟实现list(迭代器)实现代码:#pragmaonce;#include#include#includeusingnamespacestd;templ
C++实现优先队列的简单实例优先队列类模版实现:BuildMaxHeap.h头文件:#includeusingnamespacestd;#defineLeft(
C语言中栈和队列实现表达式求值的实例实现代码:#include#include#defineOK1#defineERROR0#defineSTACK_SIZE2