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-07-25 11:43:17 发布