美高梅4858赌场美高梅4858赌场作为华人首选娱乐平台,拥有澳门赌场、菲律宾双执照,美高梅集团游戏网址(www.4858.com)与亚洲最大的博彩软件提供商BBIN进行技术合作,致力于打造亚洲第一博彩集团。
当前位置:

算法练习(45): 环形缓冲区(1339)

作者: 美高梅4858赌场|来源: http://www.ff-coffee.com|栏目:www.4858.com|    日期:2020-01-04

文章关键词:

美高梅4858赌场,环形缓冲

  本系列博客习题来自《算法(第四版)》,算是本人的读书笔记,如果有人在读这本书的,欢迎大家多多交流。为了方便讨论,本人新建了一个微信群(算法交流),想要加入的,请添加我的微信号:zhujinhui207407 谢谢。另外,本人的个人博客也在不停的更新中,欢迎一起讨论

  1.3.39 环形缓冲区。环形缓冲区,又称为环形队列,是一种定长为 N 的先进先出的数据结构。它在进程间的异步数据传输或记录日志文件时十分有用。当缓冲区为空时,消费者会在数据存入缓冲区前等待;当缓冲区满时,生产者会等待数据存入缓冲区。为 RingBuffer 设计一份 API 并用(回环)数组将其实现。

  也称作圆形队列(circular queue),循环缓冲区(cyclic buffer),环形缓冲区(ring buffer),是一种用于表示一个固定尺寸、头尾相连的缓冲区的数据结构,适合缓存数据流。

  (英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案例。该问题描述了共享固定大小缓冲区的两个线程——即所谓的“生产者”和“消费者”——在实际运行时会发生的问题。生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中空时消耗数据。 要解决该问题,就必须让生产者在缓冲区满时休眠(要么干脆就放弃数据),等到下次消费者消耗缓冲区中的数据的时候,生产者才能被唤醒,开始往缓冲区添加数据。同样,也可以让消费者在缓冲区空时进入休眠,等到生产者往缓冲区添加数据之后,再唤醒消费者。通常采用进程间通信的方法解决该问题,常用的方法有信号灯法[1]等。如果解决方法不够完善,则容易出现死锁的情况。出现死锁时,两个线程都会陷入休眠,等待对方唤醒自己。该问题也能被推广到多个生产者和消费者的情形。

  回到这道题,网上的解法有很多,因为这道题可以做的很简单,也可以做的很复杂。这篇文章Java Ring Buffer大家可以借鉴一下,现在我来给出几个答案。

  本人所有简书的算法文章详细分析已经移入小专栏:算法四习题详解,欢迎大家订阅

  2016-08-11农牧人商城 截止2016年7月底,中央惠农补贴部分已下发完毕。近年来,补贴年年发,今年有何不同...

  ~YQZ致我最最最最亲爱的姑娘,要狠狠的幸福。 一定是最特别的缘分才可以一路走来变成一家人从亲子到老伴从校服到婚纱...

  它不会任何条件给人甜蜜,给人清香,他不为任何需求,给人愉快,给人香气。“纤纤绿裹排金粟,何处能容九里香”。...

  我常常觉得我有两个女儿,大女儿是我的绘画,她已经陪伴我不少年了,而我的小女儿是小水滴,她才两岁。我常常被她们感动,...

文章标签: 美高梅4858赌场 ,环形缓冲

 上一篇:环形缓冲区为什么是lock-free的?

 下一篇:环形缓冲区的实现原理(ring buffer)