街角_祝福

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

C++一读一写无锁队列

// 一读一写的无锁管道队列
template<class T>
class PipelineList
{
private:
    template<class T>
    struct qnode
    {
        struct qnode *next;
        T data;
    };

    struct qnode<T>* volatile m_front;
    struct qnode<T>* volatile m_rear;

    bool init()
    {
        m_front = m_rear = new qnode<T>;
        if (!m_front)
        {
            return false;
        }
        m_front->next = 0;
        return true;
    }
    void destroy()
    {
        while (m_front)
        {
            m_rear = m_front->next;
            delete m_front;
            m_front = m_rear;
        }
    }

public:
    PipelineList()
    {
        init();
    }
    ~PipelineList()
    {
        destroy();
    }
    bool empty()
    {
        return (m_front == m_rear);
    }
    bool push(const T& e)
    {
        struct qnode<T> *p = new qnode<T>;
        if (!p)
        {
            return false;
        }
        p->next = 0;
        m_rear->next = p;
        m_rear->data = e;
        m_rear = p;
        return true;
    }
    bool pop(T& e)
    {
        if (m_front == m_rear)
        {
            return false;
        }
        struct qnode<T> *p = m_front;
        e = p->data;
        m_front = p->next;
        delete p;
        return true;
    }
};

posted on   街角_祝福  阅读(77)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示