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

2016-02-19 09:00 9 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

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

延伸阅读
编写无错代码的最好方法是把防止错误放在第一位。 1、while语句后面的空语句问题?   while语句是一个循环语句,有时候需要空语句有时不需要空语句。为了避免出现误用用语句 我们规定在while使用空语句的时候才用下列方式: while(*pchTo++ = *pchFrom)     NULL; 使用NULL的好处在于编译程序不会为NULL语句产生任务的...
代码如下: #include "stdafx.h" #includeiostream using namespace std; int _tmain(int argc, _TCHAR* argv[]) { char s1[60]="kingbaby"; char *s2="hello"; int i=0;int j=0; while(s1[i]!='\0')i++; while((s1[i]=s2[j])!='\0'){ j++;i++; } couts1endl; return 0; } 方法二 代码如下: #include "stdafx.h" #incl...
代码如下所示: 代码如下: 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
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...
标签: 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...

经验教程

997

收藏

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