运维开发网

解析C++无锁队列的实现代码

运维开发网 https://www.qedev.com 2020-02-11 15:40 出处:网络 作者: 网络整理
本篇文章是对C++无锁队列的实现进行了详细的分析介绍,需要的朋友参考下
本文给出一种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

0

精彩评论

暂无评论...
验证码 换一张
取 消