linux内核队列实现

linux内核队列实现

/*****
author:方福建
date:2017/07/24
*****/

#ifndef _SIMPLEQUEUE_
#define _SIMPLEQUEUE_

#ifdef __cplusplus
extern "C" {
#endif
#include "kdvtype.h"

const u32 m_gMaxSize=100;

class SimpleQueue
{
public:
    SimpleQueue()
    {
        SetMaxSize(m_gMaxSize);
        m_nIn=0;
        m_nOut=0;   
        memset(m_pData,0,sizeof(m_pData));
    }
    virtual ~SimpleQueue()
    {
    }
    u32 MaxSize()
    {
        return m_dwMaxSize;
    }
    u32 Size()
    {
        return m_nIn-m_nOut;
    }
    s32 Put(void *pIn)
    {
        if(m_nIn-m_nOut>=m_dwMaxSize)
            return -1;
        u32 nPos=m_nIn & m_dwMaxSizeLess;
        m_pData[nPos]=pIn;
        m_nIn++;
        return 0;
    }

    s32 Fetch(void **pOut)
    {
        if(m_nIn-m_nOut<=0)
            return -1;
        u32 nPos=m_nOut & m_dwMaxSizeLess;
        *pOut=m_pData[nPos];
        m_nOut++;
        return 0;
    }

private:
    void SetMaxSize(u32 dwMaxSize)
    {
        m_dwMaxSize=dwMaxSize;
        m_dwMaxSizeLess=m_dwMaxSize-1;
    }
private:
    void * m_pData[m_gMaxSize];
    u32 m_dwMaxSize;
    u32 m_dwMaxSizeLess;

    volatile u32 m_nIn;
    volatile u32 m_nOut;
};





#ifdef __cplusplus
}
#endif

#endif
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值