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

2016-02-19 09:00 5 1 收藏

get新技能是需要付出行动的,即使看得再多也还是要动手试一试。今天图老师小编跟大家分享的是解析C++无锁队列的实现代码,一起来学习了解下吧!

【 tulaoshi.com - 编程语言 】

本文给出一种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::listT TList;
           TList list;
           typename TList::iterator iHead, iTail;
};
#endif

来源:https://www.tulaoshi.com/n/20160219/1589126.html

延伸阅读
1.冒泡法: 这是最原始,也是众所周知的最慢的算法了。 他的名字的由来因为它的工作看来象是冒泡: 代码如下: #include iostream.h void BubbleSort(int* pData,int Count) { int iTemp; for(int i=1;iCount;i++) { for(int j=Count-1;j=i;j--) { if(pData[j]pData[j-1]) { iTemp = pData[j-1]; pData[j-1] = pData[j]; pData[j...
代码如下所示: 代码如下: PRE class=cpp name="code"#include stdio.h #include math.h int main() {  int x,y;  printf("求x的y次幂:\n");  scanf("%d %d",&x,&y);  printf("结果是:%.2f",pow(x,y));  //要以%f输出  %d输出结果都是0  return 0; } /PREBR PRE/PRE P /P PRE/PRE PRE/PRE
代码如下所示: 代码如下: #include stdio.h int main() {  // 主要是找到行和列的关系    int i,j,k;      for(i=0;i4;i++)  //做为行循环    {     for(j=0;j=2-i;j++)  // 打印一行中的空白      printf(" ");     for(k=...
标签: Web开发
控件类代码: 代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Reflection; using System.IO; [assembly: WebResource("PageBarJS.js", "application/x...
标签: Web开发
解析得到的代码能通过XHTML 1.0 STRICT验证; 包含了标题,链接,字体,对齐,图片,引用,列表等方面的功能.  Ubb.ReadMe.htm UBB代码说明标题[h1]标题一[/h1] 标题一 [h2]标题二[/h2] 标题二 [h1]标题三[/h1] 标题三 [h4]标题四[/h4] 标题四 [h5]标题五[/h5] 标题五 [h6]标题六[/h6] 标题六 链接[url]www.unibetter.co...

经验教程

426

收藏

80
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部