template<int buflen, typename T>
class TLocklessQueue
{
protected:
T BufData[buflen];
int PutIdx;
int GetIdx;
public:
int MaxSize() {
return buflen;
}
int Len() {
return (PutIdx - GetIdx + buflen) % buflen;
}
bool isFull() {
return Len() == buflen - 1;
}
bool isEmpty() {
return PutIdx == GetIdx;
}
void PutData(const T &aput) {
int aa = PutIdx + 1;
aa %= buflen;
BufData[PutIdx] = aput;
PutIdx = aa;
}
T GetData() {
int aa = GetIdx + 1;
aa %= buflen;
T aget = BufData[GetIdx];
GetIdx = aa;
return aget;
}
};
无锁循环队列--只适合一读一写两个线程
最新推荐文章于 2024-11-23 17:51:35 发布
该博客介绍了模板类TLocklessQueue的实现,这是一个无锁队列,用于高效的数据存取。队列内部使用TBufData缓冲区存储数据,通过PutIdx和GetIdx索引来管理读写位置。方法包括获取队列最大容量、当前长度、判断是否已满或为空,以及数据的插入和取出操作。该实现利用取模运算保证了索引在缓冲区内的正确移动。
1751

被折叠的 条评论
为什么被折叠?



