多生产者单消费者的数据存储和读取方法、装置、设备制造方法及图纸

技术编号:30025482 阅读:32 留言:0更新日期:2021-09-11 06:55
本公开的实施例提供了多生产者单消费者的数据存储和读取方法、装置、设备。方法包括生产者线程获取数组中写入位置原子变量的值以及写入位置变量的值;将写入位置原子变量的值增加预设的待存储数据的大小;若获取的写入位置原子变量的值与数组中数据写入位置变量的值相同,则基于数据写入位置变量所指的位置,向数组写入待存储数据;若获取的写入位置原子变量的值与数组中数据写入位置变量的值不相同,则有其他生产者线程正在写入,不向数组写入待存储数据,并将数值增加后的写入位置原子变量的值减去预设的待存储数据的大小。以此方式,可以在不加锁的情况下解决共享内存的方案中多个生产者线程之间的数据竞争问题,进而节约了计算资源。约了计算资源。约了计算资源。

【技术实现步骤摘要】
多生产者单消费者的数据存储和读取方法、装置、设备


[0001]本公开涉及数据存储和读取领域,尤其涉及多生产者单消费者的数据存储和读取领域。

技术介绍

[0002]现代计算机大都具备多个核心,为计算机开发的软件为了有效利用多个核心会使用多线程模式,线程间交换数据有许多手段,常见的是使用共享内存的方案。
[0003]但是在共享内存的方案中,通过加锁来解决数据竞争的过程会占用部分性能开销,导致计算资源浪费。

技术实现思路

[0004]本公开提供了一种多生产者单消费者的数据存储和读取方法、装置、设备以及存储介质。
[0005]根据本公开的第一方面,提供了一种多生产者单消费者的数据存储和读取方法。该方法包括:生产者线程获取数组中写入位置原子变量的值以及写入位置变量的值;将写入位置原子变量的值增加预设的待存储数据的大小;若获取的写入位置原子变量的值与数组中数据写入位置变量的值相同,则基于数据写入位置变量所指的位置,向数组写入待存储数据;若获取的写入位置原子变量的值与数组中数据写入位置变量的值不相同,则有其他生产者线程正在写入,不向数组写入待存储数据,并将数值增加后的写入位置原子变量的值减去预设的待存储数据的大小。
[0006]在第一方面的一些实现方式中,数组基于数据写入位置变量所指的位置,向数组写入预设的待存储数据,还包括:获取数组中读取位置变量的值;根据读取位置变量的值和写入位置变量的值确定数组的剩余存储空间;若剩余存储空间大于或等于待存储数据所占的空间,则基于数据写入位置变量所指的位置,向数组写入待存储数据。
[0007]在第一方面的一些实现方式中,根据读取位置变量的值和写入位置变量的值确定数组的剩余存储空间,包括:若读取位置变量的值大于写入位置变量的值,则剩余存储空间为读取位置变量的值减去写入位置变量的值再减一;若读取位置变量的值小于或等于写入位置变量的值,则剩余存储空间为数组的容量值与读取位置变量的值之和减去写入位置变量的值再减去一。
[0008]在第一方面的一些实现方式中,基于数据写入位置变量所指的位置,向数组写入预设的待存储数据,包括:
在数组的尾部元素位置写入待存储数据中的部分数据且待存储数据未完全写入数组的情况下,将待存储数据中未写入数组的部分从数组的头部元素位置进行写入。
[0009]在第一方面的一些实现方式中,该方法还包括:在剩余存储空间小于待存储数据所占的空间的情况下,不写入待存储数据。
[0010]在第一方面的一些实现方式中,该方法还包括:消费者线程根据读取位置变量的值和写入位置变量的值确定可消费数据的大小;若可消费数据的大小大于期望消费数据的大小,则基于读取位置变量所指的位置,读取数组存储的数据,并更新读取位置变量的值,其中,期望消费数据的大小为待存储数据所占的空间减去剩余存储空间。
[0011]在第一方面的一些实现方式中,根据读取位置变量的值和写入位置变量的值确定可消费数据的大小,包括:若读取位置变量的值小于或等于写入位置变量的值,则根据写入位置变量的值与读取位置变量的值的差值,确定可消费数据的大小;若读取位置变量的值大于写入位置变量的值,则可消费数据的大小为数组的容量值与写入位置变量的值之和减去读取位置变量的值。
[0012]根据本公开的第二方面,提供了一种多生产者单消费者的数据存储和读取装置,该装置包括:获取模块,用于生产者线程获取数组中写入位置原子变量的值以及写入位置变量的值;写入位置原子变量值调整模块,用于将写入位置原子变量的值增加预设的待存储数据的大小;数据写入模块,用于若获取的写入位置原子变量的值与数组中数据写入位置变量的值相同,则基于数据写入位置变量所指的位置,向数组写入待存储数据;处理模块,用于若获取的写入位置原子变量的值与数组中数据写入位置变量的值不相同,则有其他生产者正在写入,不向数组写入待存储数据,并将数值增加后的写入位置原子变量的值减去预设的待存储数据的大小。
[0013]根据本公开的第三方面,提供了一种电子设备。该电子设备包括:存储器和处理器,所述存储器上存储有计算机程序,所述处理器执行所述程序时实现如以上所述第一方面,以及第一方面的一些实现方式中的多生产者单消费者的数据存储和读取方法。
[0014]根据本公开的第四方面,提供了一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现如以上所述第一方面,以及第一方面的一些实现方式中的多生产者单消费者的数据存储和读取方法。
[0015]本公开提供的多生产者单消费者的数据存储和读取方法、装置、设备以及存储介质,生产者线程通过获取数组中写入位置原子变量的值以及写入位置变量的值;将写入位置原子变量的值增加预设的待存储数据的大小;若获取的写入位置原子变量的值与数组中数据写入位置变量的值相同,则基于数据写入位置变量所指的位置,向数组写入待存储数据;若获取的写入位置原子变量的值与数组中数据写入位置变量的值不相同,则有其他生产者线程正在写入,不向数组写入待存储数据,并将数值增加后的写入位置原子变量的值减去预设的待存储数据的大小。通过获取写入位置原子变量的值与数据写入位置变量的值
进行比对确定是否有生产者正在写入,来实现在不加锁的情况下解决共享内存的方案中多个生产者线程之间的数据竞争问题,进而节约了计算资源,提高了资源利用率。
[0016]应当理解,
技术实现思路
部分中所描述的内容并非旨在限定本公开的实施例的关键或重要特征,亦非用于限制本公开的范围。本公开的其它特征将通过以下的描述变得容易理解。
附图说明
[0017]结合附图并参考以下详细说明,本公开各实施例的上述和其他特征、优点及方面将变得更加明显。附图用于更好地理解本方案,不构成对本公开的限定在附图中,相同或相似的附图标记表示相同或相似的元素,其中:图1示出了根据本公开的实施例的多生产者单消费者的数据存储和读取方法的流程示意图;图2示出了根据本公开的实施例的数据存储流程图;图3示出了根据本公开的实施例的数据消费的流程示意图;图4示出了根据本公开的实施例的多生产者单消费者的数据存储和读取装置的结构框图;图5示出了能够实施本公开的实施例的示例性电子设备的结构框图。
具体实施方式
[0018]为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的全部其他实施例,都属于本公开保护的范围。
[0019]另外,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
[0020]现代计算机大都具备多个核心,为计算机开发的软件为了有效利用多个核心会使用多线程模式,线程间交换数据本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种多生产者单消费者的数据存储和读取方法,其特征在于,所述方法包括:生产者线程获取数组中写入位置原子变量的值以及写入位置变量的值;将所述写入位置原子变量的值增加预设的待存储数据的大小;若获取的写入位置原子变量的值与所述数组中数据写入位置变量的值相同,则基于所述数据写入位置变量所指的位置,向所述数组写入所述待存储数据;若获取的写入位置原子变量的值与所述数组中数据写入位置变量的值不相同,则有其他生产者线程正在写入,不向所述数组写入所述待存储数据,并将数值增加后的写入位置原子变量的值减去预设的待存储数据的大小。2.根据权利要求1所述的方法,其特征在于,数组所述基于所述数据写入位置变量所指的位置,向所述数组写入预设的待存储数据,包括:获取所述数组中读取位置变量的值;根据所述读取位置变量的值和所述写入位置变量的值确定所述数组的剩余存储空间;若所述剩余存储空间大于或等于所述待存储数据所占的空间,则基于所述数据写入位置变量所指的位置,向所述数组写入所述待存储数据。3.根据权利要求2所述的方法,其特征在于,所述根据所述读取位置变量的值和所述写入位置变量的值确定所述数组的剩余存储空间,包括:若所述读取位置变量的值大于所述写入位置变量的值,则所述剩余存储空间为读取位置变量的值减去所述写入位置变量的值再减一;若所述读取位置变量的值小于或等于所述写入位置变量的值,则所述剩余存储空间为所述数组的容量值与所述读取位置变量的值之和减去所述写入位置变量的值再减去一。4.根据权利要求1至3中任意一项所述的方法,其特征在于,所述基于所述数据写入位置变量所指的位置,向所述数组写入预设的待存储数据,包括:在所述数组的尾部元素位置写入所述待存储数据中的部分数据且所述待存储数据未完全写入所述数组的情况下,将所述待存储数据中未写入所述数组的部分从所述数组的头部元素位置进行写入。5.根据权利要求2所述的方法,其特征在于,所述方法还包括:在所述剩余存储空间小于所述待存储数据所占的空间的情况下,不写入所述待存储数据。6.根据权利要求2、3以及5中任意一项所述的方法...

【专利技术属性】
技术研发人员:姚磊磊陈勇马维士刘加瑞
申请(专利权)人:北京华云安信息技术有限公司
类型:发明
国别省市:

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

1