• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

C++数据结构与算法之双缓存队列实现方法详解

c++ 搞代码 4年前 (2022-01-06) 20次浏览 已收录 0个评论

这篇文章主要介绍了C++数据结构与算法之双缓存队列实现方法,结合实例形式分析了双缓存队列的原理、实现方法与相关注意事项,需要的朋友可以参考下

本文实例讲述了C++数据结构与算法之双缓存队列实现方法。分享给大家供大家参考,具体如下:

“双缓存队列”是我在一次开发任务中针对特殊场景设计出来的结构。使用场景为:发送端持续向接收端发送数据包――并且不理会接收端是否完成业务逻辑。由于接收端在任何情况下停止响应即可能产生数据丢失,因此无法简单的设计一条线程安全队列来对数据写入或读取(读取数据时将队列上锁视为对写入的停止响应)。

鉴于此,我的设计思路如下:

接收端首先向A队列中写入数据,然后当数据处理请求到来的时候切换到B队列继续写入,之后将A队列中的数据交给数据处理模块,处理完成以后A队列数据清空。当下一次数据处理请求到来时,再将写入请求切换回A队列,并把B队列中的数据提交给数据处理模块再清空队列B,轮流作业。

有了思路以后,代码就比较简单了。

 #include  template class DoubleArray { struct NODE { T t; NODE* next; }; int size_a; int size_b; NODE* header_a; NODE* header_a_cur; NODE* header_b; NODE* header_b_cur; int tri<i style="color:transparent">来源gaodai$ma#com搞$$代**码网</i>gger; public: DoubleArray() : size_a(0), size_b(0), trigger(0), header_a(0), header_a_cur(0), header_b(0), header_b_cur(0) { } int push(T t); std::list& fetch(std::list& list); }; template int DoubleArray::push(T t) { NODE *n = new NODE; n->t = t; n->next = 0; if (size_a == 0 && trigger == 0) { header_a = n; header_a_cur = n; size_a++; } else if (size_b == 0 && trigger == 1) { header_b = n; header_b_cur = n; size_b++; } else { switch (trigger) { case 0: header_a_cur->next = n; header_a_cur = n; size_a++; break; case 1: header_b_cur->next = n; header_b_cur = n; size_b++; break; } } } template std::list& DoubleArray::fetch(std::list& list) { switch (trigger) { case 0: if (header_a != 0) { // change b trigger = 1; // fetch a NODE* temp = header_a; while (temp) { list.push_back(temp->t); temp = temp->next; } // delete a temp = header_a; for (int i = 0; i next; delete p; } size_a = 0; header_a = 0; header_a_cur = 0; } break; case 1: if (header_b != 0) { // change a trigger = 0; // fetch b NODE* temp = header_b; // delete b while (temp) { list.push_back(temp->t); temp = temp->next; } temp = header_b; for (int i = 0; i next; delete p; } size_b = 0; header_b = 0; header_b_cur = 0; } break; } return list; } 

注:开发环境与IDE分别为CentOS 7,NetBeans 8.2

希望本文所述对大家C++程序设计有所帮助。

以上就是C++数据结构与算法之双缓存队列实现方法详解的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:C++数据结构与算法之双缓存队列实现方法详解

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址