国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

解析C++無鎖隊列的實現代碼

2020-01-26 16:12:43
字體:
來源:轉載
供稿:網友
本文給出一種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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 武冈市| 荔波县| 都江堰市| 辽宁省| 台山市| 潮州市| 营口市| 临潭县| 苍溪县| 蒲江县| 铜鼓县| 贵阳市| 屏山县| 汤原县| 莱州市| 涟源市| 尼勒克县| 莱阳市| 西城区| 航空| 南部县| 石屏县| 德阳市| 武夷山市| 安徽省| 吉木萨尔县| 阳高县| 张家口市| 海丰县| 桃园市| 新巴尔虎右旗| 达拉特旗| 舟曲县| 石渠县| 雷波县| 普陀区| 贡嘎县| 永安市| 德保县| 商南县| 尼木县|