一种用循环队列缓冲数据的方法技术

技术编号:16557147 阅读:43 留言:0更新日期:2017-11-14 16:45
本发明专利技术属于缓冲方法,具体涉及一种用循环队列缓冲数据的方法。一种用循环队列缓冲数据的方法,包括下述步骤:步骤一:建立队列,建立能够增加长度,也能够减少长度的队列,步骤二:数据的存取,当有新数据存入队列时,首先增加队列头对应的地址,然后在该地址内存入相应数据;当有数据被读取出队列时,首先将队列尾的数据输出,然后增加队列尾对应的地址,步骤三:地址循环使用,将队列的标志和队列标志对应的地址分开处理。本发明专利技术的效果是:极大的增加了硬件利用率,而且该方法并不针对某一特定数据处理过程,因而无论操作系统还是应用程序,都可以使用该方法优化,所有优化累计起来的效果是巨大的。

A method of buffering data with a circular queue

The invention belongs to a buffering method, in particular to a method for buffering data with a cyclic queue. A method for circular queue buffer data, which comprises the following steps: step one: create a queue, set up to increase the length, also can reduce the length of the queue, step two: data access, when new data is stored in the queue, the first increase in the head of the queue corresponding to the address, then the address memory into the corresponding data; when the data is read out of the queue, the queue tail data output, and then increase the queue tail corresponding address, step three: address cycle use, the queue sign and queue mark the corresponding address separately. The effect of the invention is to greatly increase the utilization ratio of the hardware, and the method is not for a particular data processing, so regardless of the operating system or application program, can optimize the method used, all optimization to the cumulative effect is large.

【技术实现步骤摘要】
一种用循环队列缓冲数据的方法
本专利技术属于缓冲方法,具体涉及一种用循环队列缓冲数据的方法。
技术介绍
通信和信号处理领域经常要用到的数据缓冲。由于数据接收和处理往往不是同频同步,需要有一个足够大的缓冲区来缓冲数据。一般用队列来缓冲数据。队列是一种常用的线性表数据结构,在一端插入数据,在另一端删除数据,就是我们常说的FIFO。用链表的方式实现涉及到动态内存分配,效率较低,而且在很多嵌入式应用中无法实现。用数组的方式,由于缓冲区大小有限且位置固定,每次数据更新都要移动已经收到的数据。如果缓冲区大小为N,那么最不利的情况下队列数据更新的时间复杂度为o(N)。在N很大的时候,会占用很多CPU的宝贵时间。
技术实现思路
本专利技术针对现有技术的缺陷,提供一种用循环队列缓冲数据的方法。本专利技术是这样实现的:一种用循环队列缓冲数据的方法,包括下述步骤:步骤一:建立队列建立能够增加长度,也能够减少长度的队列,步骤二:数据的存取当有新数据存入队列时,首先增加队列头对应的地址,然后在该地址内存入相应数据;当有数据被读取出队列时,首先将队列尾的数据输出,然后增加队列尾对应的地址,步骤三:地址循环使用将队列的标志和队列标志对应的地址分开处理。如上所述的一种用循环队列缓冲数据的方法,其中,所述的步骤一中设置两个标志位,一个标志位表示队列的头,一个标志位表示队列的尾,当需要增加队列长度时,增加队列头对应的地址,当需要减小队列的长度时,增加队列尾对应的地址。如上所述的一种用循环队列缓冲数据的方法,其中,所述的步骤一中,表示队列头的标志位的数值大于标志队列尾的标志位的数值。如上所述的一种用循环队列缓冲数据的方法,其中,所述的步骤一中设置队列长度。如上所述的一种用循环队列缓冲数据的方法,其中,所述的步骤三当队列标志对应的地址溢出时,将该地址指定为队列最初的地址位,但是队列标志的序号仍按照原规则增加,此处的队列标志表哭队列头标志位和队列尾标志位。如上所述的一种用循环队列缓冲数据的方法,其中,由于标志位为32位无符号整型,最大存储量为4G。本专利技术的效果是:通过将标志位与地址分开处理,使得本来有限的队列长度可以无限循环使用,队列使用的限制由原来的队列长度转变为队列标志位的数值最大限制,极大的增加了硬件利用率。而且该方法并不针对某一特定数据处理过程,因而无论操作系统还是应用程序,都可以使用该方法优化,所有优化累计起来的效果是巨大的。具体实施方式一种用循环队列缓冲数据的方法,包括下述步骤:步骤一:建立队列建立能够增加长度,也能够减少长度的队列。设置两个标志位,一个标志位表示队列的头,一个标志位表示队列的尾,当需要增加队列长度时,增加队列头对应的地址,当需要减小队列的长度时,增加队列尾对应的地址。设置时,表示队列头的标志位的数值大于标志队列尾的标志位的数值。另外设置队列长度。步骤二:数据的存取当有新数据存入队列时,首先增加队列头对应的地址,然后在该地址内存入相应数据;当有数据被读取出队列时,首先将队列尾的数据输出,然后增加队列尾对应的地址。步骤三:地址循环使用由于计算机给队列的存储空间大小是固定的,而上述数据存取时,地址均是增加的,因而无论队列空间多大,都会出现地址溢出的情况。如果将地址溢出对应的标志循环回最初地址位时,又会产生队列头和队列尾无法区分的问题。将队列的标志和队列标志对应的地址分开处理,即当队列标志对应的地址溢出时,将该地址指定为队列最初的地址位,但是队列标志的序号仍按照原规则增加。此处的队列标志表哭队列头标志位和队列尾标志位。例如设队列头标志位用Index1表示,对应的地址用A表示,队列尾标志位用Index2表示,对应地址用B表示,队列长度为N,队列最初的地址位为Z,那么,当Index1对应的地址A溢出时,将A指定为Z,但是Index1++的执行内容不变,同理当Index2对应的地址B溢出时,将B指定为Z,但是Index2++的执行内容不变。此时队列的长度为Index1-Index2,每个地址却不是顺次给出的地址位了,此时只需要根据标志位对应的地址进行存取,那么数据便不会产生错误。由于标志位一般为32位无符号整型,因而最大存储量为4G。下面给出更为详细的解释说明。设队列的长度为N,队列缓冲区为Q[N],用Index1表示数据的插入索引标号,用Index2表示数据的删除索引标号。插入数据操作可以简单的表示成:Q[Index1++]=NEWDATA;数据的删除操作只需要增加Index2标号就可以了。比如我们要把数据存入文件,可以写成函数为:SAVE_TO_FILE(Q[Index2++]);当Index2小于Index1的时候,表示队列中有数据,可以读出来。当Index2等于Index1的时候,表示队列为空,等待数据插入。一般由两个线程同时工作,分别完成数据的插入和读取。队列插入线程可以写成如下伪代码:队列的读取删除线程可以写成如下伪代码:由于N只能是有限大小,随着数据不断插入,Index1和Index2都会大于N,此时就会出现内存溢出的问题了。为此设计循环队列存储数据。我们能想到的做法是Index大于等于N的时候,从队列头存取数据。每次Index1、Index2自加1的时候对N求余数:Index=(Index+1)%N;这样,当Index超出N的时候,又从队列头的开始了。然而这又带来新的问题,就是会出现Index2大于Index1的情况了。这使得逻辑变得混乱。考虑这样的操作方式,Index1、Index2自加赋值的时候不对N求模,只在存取数据的时候求模。这样能够保证Index2永远不大于Index1。据此,队列插入线程可以写成如下伪代码:队列的读取删除线程可以写成如下伪代码:两个线程的代码还是保持了简单的逻辑。每插入一个新的数据只需要一次写入操作,每处理一个数据只需要一次读取操作。保证了数据缓冲的高效性。如果Index1,Index2的数据类型为32位无符号整型,可以存取的数据最多是4G,如果数据量比较大,可以将Index1,Index2的数据类型扩充为64位无符号整型。本文档来自技高网...

【技术保护点】
一种用循环队列缓冲数据的方法,其特征在于,包括下述步骤:步骤一:建立队列建立能够增加长度,也能够减少长度的队列,步骤二:数据的存取当有新数据存入队列时,首先增加队列头对应的地址,然后在该地址内存入相应数据;当有数据被读取出队列时,首先将队列尾的数据输出,然后增加队列尾对应的地址,步骤三:地址循环使用将队列的标志和队列标志对应的地址分开处理。

【技术特征摘要】
1.一种用循环队列缓冲数据的方法,其特征在于,包括下述步骤:步骤一:建立队列建立能够增加长度,也能够减少长度的队列,步骤二:数据的存取当有新数据存入队列时,首先增加队列头对应的地址,然后在该地址内存入相应数据;当有数据被读取出队列时,首先将队列尾的数据输出,然后增加队列尾对应的地址,步骤三:地址循环使用将队列的标志和队列标志对应的地址分开处理。2.如权利要求1所述的一种用循环队列缓冲数据的方法,其特征在于:所述的步骤一中设置两个标志位,一个标志位表示队列的头,一个标志位表示队列的尾,当需要增加队列长度时,增加队列头对应的地址,当需要减小队列的长度时,增加队列尾...

【专利技术属性】
技术研发人员:王大雨
申请(专利权)人:北京自动化控制设备研究所
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1