当前位置: 首页 > 专利查询>张荣晋专利>正文

一种环形缓冲区读写方法和装置制造方法及图纸

技术编号:29132731 阅读:45 留言:0更新日期:2021-07-02 22:28
本申请公开了一种环形缓冲区读写方法和装置,该方法包括:获取环形缓冲区的长度N,其中,环形缓冲区的长度为N标识环形缓冲区中有N个元素,环形缓冲区的相邻元素之间的地址间隔是相同的;将环形缓冲区分为M个组,其中,M个组中的每个组中的相邻元素之间的地址间隔是相同的;M个组分别作为环形缓冲区的子环形缓冲区,每个组为一个子环形缓冲区,子环形缓冲区的数量为M个;对M个子环形缓冲区中的一个或多个进行读操作,或者进行写操作。通过本申请解决了现有技术中的环形缓冲区对于同一操作一次只能有一个用户进行从而导致读写效率低的问题,在一定程度上提高了环形缓冲区的读写效率。

【技术实现步骤摘要】
一种环形缓冲区读写方法和装置
本申请涉及到软件领域,具体而言,涉及一种环形缓冲区读写方法和装置。
技术介绍
在程序中(例如,通信程序),经常使用环形缓冲区作为数据结构来存放通信中发送和接收的数据。环形缓冲区是一个先进先出的循环缓冲区,可以向通信程序提供对缓冲区的互斥访问。环形缓冲区通常有一个读指针和一个写指针。读指针指向环形缓冲区中可读的数据,写指针指向环形缓冲区中可写的缓冲区。通过移动读指针和写指针就可以实现缓冲区的数据读取和写入。在通常情况下,环形缓冲区的读用户仅仅会影响读指针,而写用户仅仅会影响写指针。如果仅仅有一个读用户和一个写用户,那么不需要添加互斥保护机制就可以保证数据的正确性。如果有多个读写用户访问环形缓冲区,那么必须添加互斥保护机制来确保多个用户互斥访问环形缓冲区。也就是说,对于环形缓冲区的读操作或者写操作来说,其最多有一个用户来进行,这就在一定程度上降低了读写数据的效率。
技术实现思路
本申请实施例提供了一种环形缓冲区读写方法和装置,以至少解决现有技术中的环形缓冲区对于同一操作一次只能有一个用户进行从而导致读写效率低的问题。根据本申请的一个方面,提供了一种环形缓冲区读写方法,包括:获取环形缓冲区的长度N,其中,所述环形缓冲区的长度为N标识所述环形缓冲区中有N个元素,所述环形缓冲区的相邻元素之间的地址间隔是相同的;将所述环形缓冲区分为M个组,其中,所述M个组中的每个组中的相邻元素之间的地址间隔是相同的;所述M个组分别作为所述环形缓冲区的子环形缓冲区,每个组为一个子环形缓冲区,所述子环形缓冲区的数量为M个;对所述M个子环形缓冲区中的一个或多个进行读操作,或者进行写操作。进一步地,对所述M个子环形缓冲区中的一个或多个进行读操作包括:在对所述环形缓冲区进行写操作的情况下,从所述M个子环形缓冲区中的多个子环形缓冲区进行读操作;或者,对所述M个子环形缓冲区中的一个或多个进行写操作包括:在对所述环形缓冲区进行读操作的情况下,从所述M个子环形缓冲区中的多个子环形缓冲区进行写操作。进一步地,所述N大于等于所述M,所述N和所述M均为正整数,所述N能被所述M整除。进一步地,每个所述子环形缓冲区中的相邻元素之间的地址间隔均相同。进一步地,所述环形缓冲区的第p个元素的地址为:(i*p+offset)%N,其中,i为所述环形缓冲区的相邻元素之间的地址间隔,offset为第0个元素的地址,N为所述环形缓冲区的长度,%为模运算;每个所述子环形缓冲区的第p个元素的地址为:(j*p+m)%N,其中,j为所述子环形缓冲区的相邻元素之间的地址间隔,m为每个子环形缓冲区第0个元素的地址,其中,j大于i。根据本申请的另一个方面,还提供了一种环形缓冲区读写装置,包括:获取模块,用于获取环形缓冲区的长度N,其中,所述环形缓冲区的长度为N标识所述环形缓冲区中有N个元素,所述环形缓冲区的相邻元素之间的地址间隔是相同的;划分模块,用于将所述环形缓冲区分为M个组,其中,所述M个组中的每个组中的相邻元素之间的地址间隔是相同的,所述M个组分别作为所述环形缓冲区的子环形缓冲区,每个组为一个子环形缓冲区,所述子环形缓冲区的数量为M个;读写模块,用于对所述M个子环形缓冲区中的一个或多个进行读操作,或者进行写操作。进一步地,所述读写模块用于在对所述环形缓冲区进行写操作的情况下,从所述M个子环形缓冲区中的多个子环形缓冲区进行读操作;或者,所述读写模块用于在对所述环形缓冲区进行读操作的情况下,从所述M个子环形缓冲区中的多个子环形缓冲区进行写操作。进一步地,所述N大于等于所述M,所述N和所述M均为正整数,所述N能被所述M整除。进一步地,每个所述子环形缓冲区中的相邻元素之间的地址间隔均相同。进一步地,所述环形缓冲区的第p个元素的地址为:(i*p+offset)%N,其中,i为所述环形缓冲区的相邻元素之间的地址间隔,offset为第0个元素的地址,N为所述环形缓冲区的长度,%为模运算;每个所述子环形缓冲区的第p个元素的地址为:(j*p+m)%N,其中,j为所述子环形缓冲区的相邻元素之间的地址间隔,m为每个子环形缓冲区第0个元素的地址,其中,j大于i。在本申请实施例中,采用了获取环形缓冲区的长度N,其中,所述环形缓冲区的长度为N标识所述环形缓冲区中有N个元素,所述环形缓冲区的相邻元素之间的地址间隔是相同的;将所述环形缓冲区分为M个组,其中,所述M个组中的每个组中的相邻元素之间的地址间隔是相同的;所述M个组分别作为所述环形缓冲区的子环形缓冲区,每个组为一个子环形缓冲区,所述子环形缓冲区的数量为M个;对所述M个子环形缓冲区中的一个或多个进行读操作,或者进行写操作。通过本申请解决了现有技术中的环形缓冲区对于同一操作一次只能有一个用户进行从而导致读写效率低的问题,在一定程度上提高了环形缓冲区的读写效率。附图说明构成本申请的一部分的附图用来提供对本申请的进一步理解,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:图1是根据本申请实施例的环形缓冲区读写方法的流程图。具体实施方式需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。在本实施例中,提供了一种环形缓冲区读写方法,图1是根据本申请实施例的环形缓冲区读写方法的流程图,如图1所示,该流程包括如下步骤:步骤S102,获取环形缓冲区的长度N,其中,环形缓冲区的长度为N标识环形缓冲区中有N个元素,环形缓冲区的相邻元素之间的地址间隔是相同的;步骤S104,将环形缓冲区分为M个组,其中,M个组中的每个组中的相邻元素之间的地址间隔是相同的;M个组分别作为环形缓冲区的子环形缓冲区,每个组为一个子环形缓冲区,子环形缓冲区的数量为M个;步骤S106,对M个子环形缓冲区中的一个或多个进行读操作,或者进行写操作。在环形缓冲区中,如果仅仅有一个读用户和一个写用户,那么不需要添加互斥保护机制就可以保证数据的正确性。如果有多个读写用户访问环形缓冲区,那么必须添加互斥保护机制来确保多个用户互斥访问环形缓冲区。因此,对于一个环形缓冲区中读操作是不能并发的,同理多个写操作也是不能并发的,这导致读写的效率比较低。通过上述步骤,将一个环形缓冲区分为了多个子环形缓冲区,在进行读操作的时候,只要保证在一个子环形缓冲区的读操作或者写操作只有一个用户在进行即可,因此,对于环形缓冲区来说,这是由于子环形缓冲区的划分,可以并发M个读操作,或者也可以并发M个写操作,这种读写效率相对于为划分子环形缓冲区来说,提高了很多。通过上述步骤解决了现有技术中的环形缓冲区对于同一操作一次只能有一个用户进行从而导致读写效率低本文档来自技高网...

【技术保护点】
1.一种环形缓冲区读写方法,其特征在于,包括:/n获取环形缓冲区的长度N,其中,所述环形缓冲区的长度为N标识所述环形缓冲区中有N个元素,所述环形缓冲区的相邻元素之间的地址间隔是相同的;/n将所述环形缓冲区分为M个组,其中,所述M个组中的每个组中的相邻元素之间的地址间隔是相同的;所述M个组分别作为所述环形缓冲区的子环形缓冲区,每个组为一个子环形缓冲区,所述子环形缓冲区的数量为M个;/n对所述M个子环形缓冲区中的一个或多个进行读操作,或者进行写操作。/n

【技术特征摘要】
1.一种环形缓冲区读写方法,其特征在于,包括:
获取环形缓冲区的长度N,其中,所述环形缓冲区的长度为N标识所述环形缓冲区中有N个元素,所述环形缓冲区的相邻元素之间的地址间隔是相同的;
将所述环形缓冲区分为M个组,其中,所述M个组中的每个组中的相邻元素之间的地址间隔是相同的;所述M个组分别作为所述环形缓冲区的子环形缓冲区,每个组为一个子环形缓冲区,所述子环形缓冲区的数量为M个;
对所述M个子环形缓冲区中的一个或多个进行读操作,或者进行写操作。


2.根据权利要求1所述的方法,其特征在于,
对所述M个子环形缓冲区中的一个或多个进行读操作包括:在对所述环形缓冲区进行写操作的情况下,从所述M个子环形缓冲区中的多个子环形缓冲区进行读操作;或者,
对所述M个子环形缓冲区中的一个或多个进行写操作包括:在对所述环形缓冲区进行读操作的情况下,从所述M个子环形缓冲区中的多个子环形缓冲区进行写操作。


3.根据权利要求1或2所述的方法,其特征在于,
所述N大于等于所述M,所述N和所述M均为正整数,所述N能被所述M整除。


4.根据权利要求3所述的方法,其特征在于,每个所述子环形缓冲区中的相邻元素之间的地址间隔均相同。


5.根据权利要求4所述的方法,其特征在于,
所述环形缓冲区的第p个元素的地址为:(i*p+offset)%N,其中,i为所述环形缓冲区的相邻元素之间的地址间隔,offset为第0个元素的地址,N为所述环形缓冲区的长度,%为模运算;
每个所述子环形缓冲区的第p个元素的地址为:(j*p+m)%N,其中,j为所述子环形缓冲区的相邻元素之间的地址间隔,m为每个子环形缓冲区第0个元素的地址,其中,j大于i。...

【专利技术属性】
技术研发人员:张荣晋
申请(专利权)人:张荣晋
类型:发明
国别省市:河北;13

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

1