本申请涉及基于环形链表的多线程消息数据存取方法及装置。方法包括:建立环形链表,环形链表包括若干个存储单元,若干个存储单元按次序呈环形排列;建立首指针寄存器和尾指针寄存器,首指针寄存器和尾指针寄存器分别存储Head指针和Tail指针,Head指针及Tail指针均赋予初始值;写入消息时,对Head指针对应的存储单元执行CAS写操作,若成功将新值写入则Head指针及Tail指针分别自增1,若将新值写入失败则重新执行本步骤;消费者各自记录已读取消息对应的存储单元次序,记为已读取位置,消费者读取新的消息时,读取环形链表从已读取位置至所述Tail指针之间的全部存储单元存储的消息。采用本申请提供的数据存取方法及装置,避免多个线程竞争资源,提高线程的工作效率。提高线程的工作效率。提高线程的工作效率。
【技术实现步骤摘要】
基于环形链表的多线程消息数据存取方法及装置
[0001]本申请涉及计算机
,尤其是涉及一种基于环形链表的多线程消息数据存取方法及装置。
技术介绍
[0002]队列是一种数据结构,采用链表和数组均可实现。常用的队列主要有以下两种:先进先出:先插入的队列的元素也最先出队列,类似于排队的功能;后进先出:后插入队列的元素最先出队列,这种队列优先处理最近发生的事件。
[0003]多线程环境中,通过队列可以实现数据共享,比如经典的“生产者”和“消费者”模型中,通过队列可以很便利地实现两者之间的数据共享。假设我们有若干生产者线程,另外又有若干个消费者线程。如果生产者线程需要把准备好的数据共享给消费者线程,利用队列的方式来传递数据,就可以很方便地解决他们之间的数据共享问题。但如果生产者和消费者在某个时间段内,容易发生数据处理速度不匹配的情况,为了解决这种生产能力和消费能力不均衡的问题,便诞生了生产者和消费者模式。
[0004]生产者和消费者模型是通过一个队列来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通信,而是通过阻塞队列来进行通信,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者读取数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。
[0005]现有技术中,使用多线程技术对多个数据进行异步处理,使用阻塞队列构造缓冲池,供生产者即数据生成方与消费者即数据处理方存放交互数据,同时利用锁机制保障缓冲池中数据的一致性。然而,加锁通常会降低线程的工作效率。例如:线程因为竞争不到锁而被挂起,等锁被释放的时候,线程又会被恢复,由于整个过程中线程正在等待锁,无法正常工作。
[0006]因此,急需一种避免多个线程竞争同一资源,同时避免线程因锁机制等待CPU分配资源而降低工作效率的技术。
技术实现思路
[0007]本专利技术要解决的技术问题:如何减少多个线程竞争资源,避免线程因锁机制等待CPU分配资源而降低工作效率。
[0008]为解决上述问题,本专利技术提供一种基于环形链表的多线程消息数据存取方法及装置,采用本专利技术提供的基于环形链表的多线程消息数据存取方法,将生产者写入数据与消费者读取数据进行分离,避免多个线程竞争同一资源,减少线程阻塞等待CPU分配资源所消耗的时间,提高线程的工作效率。
[0009]第一方面,本专利技术提供一种基于环形链表的多线程消息数据存取方法,包括:建立环形链表,所述环形链表包括若干个存储单元,若干个所述存储单元按次序呈环形排列;
建立首指针寄存器和尾指针寄存器,所述首指针寄存器和尾指针寄存器分别存储Head指针和Tail指针,所述Head指针及所述Tail指针均赋予初始值;任一生产者写入消息时,对所述Head指针对应的存储单元执行CAS写操作,若成功将新值写入所述Head指针对应的存储单元,则所述Head指针及所述Tail指针分别自增1,若将新值写入所述Head指针对应的存储单元失败,则重新执行本步骤;消费者各自记录已读取消息对应的存储单元次序,记为已读取位置,消费者读取新的消息时,读取所述环形链表从已读取位置至所述Tail指针之间的全部存储单元存储的消息。
[0010]进一步地,所述建立环形链表的方法包括:设置若干存储单元,所述存储单元包括存储区和指针,所述存储区用于存储消息,所述指针指向环形排列中下一次序的存储单元的地址,形成所述环形链表。
[0011]进一步地,所述建立环形链表的方法包括:设置若干存储单元,所述存储单元包括存储区、前指针和后指针,所述存储区用于存储消息,所述前指针指向环形排列中前一次序的存储单元的地址,所述后指针指向环形排列中后一次序的存储单元的地址,形成所述环形链表。
[0012]进一步地,对所述Head指针对应的存储单元执行CAS写操作包括:获取CAS机制的内存位置V、预期原值A及更新值B;将内存位置V的值与预期原值A的值对比,若V=A,则将所述内存位置V的值更新为更新值B,若V≠A,则不更新内存位置V。
[0013]进一步地,所述Head指针自增1的方法包括:执行CAS写操作对所述Head指针加1。
[0014]进一步地,所述Tail指针自增1的方法包括:执行CAS写操作对Tail指针加1。
[0015]第二方面,本专利技术提供一种基于环形链表的多线程消息数据存取系统,所述系统包括:链表建立模块,所述链表建立模块执行以下步骤:建立环形链表,所述环形链表包括若干个存储单元,若干个所述存储单元按次序呈环形排列;指针建立模块,所述指针建立模块执行以下步骤:建立首指针寄存器和尾指针寄存器,所述首指针寄存器和尾指针寄存器分别存储Head指针和Tail指针,所述Head指针及所述Tail指针均赋予初始值;消息写入模块,所述消息写入模块执行以下步骤:任一生产者写入消息时,对所述Head指针对应的存储单元执行CAS写操作,若成功将新值写入所述Head指针对应的存储单元,则所述Head指针及所述Tail指针分别自增1,若将新值写入所述Head指针对应的存储单元失败,则重新执行本步骤;消息读取模块,所述消息读取模块执行以下步骤:消费者各自记录已读取消息对应的存储单元次序,记为已读取位置,消费者读取新的消息时,读取所述环形链表从已读取位置至所述Tail指针之间的全部存储单元存储的消息。
[0016]进一步地,所述系统还包括:CAS写操作执行模块,所述CAS写操作执行模块执行以下步骤:获取CAS机制的内存位置V、预期原值A及更新值B;将内存位置V的值与预期原值A的值对比,若V=A,则将所述内存位置V的值更新为更新值B,若V≠A,则不更新内存位置V。
[0017]进一步地,所述系统还包括:所述链表建立模块建立环形链表时,执行以下步骤:设置若干存储单元,所述存储单元包括存储区和指针,所述存储区用于存储消息,所述指针指向环形排列中下一次序的存储单元的地址,形成所述环形链表。
[0018]进一步地,所述系统还包括:所述链表建立模块建立环形链表时,执行以下步骤:设置若干存储单元,所述存储单元包括存储区、前指针和后指针,所述存储区用于存储消息,所述前指针指向环形排列中前一次序的存储单元的地址,所述后指针指向环形排列中后一次序的存储单元的地址,形成所述环形链表。
[0019]第三方面,本专利技术提供一种计算机设备,所述计算机设备包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现上述第一方面所述的基于环形链表的多线程消息数据存取方法。
[0020]第四方面,本专利技术提供一种计算机可读存储介质,述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述第一方面所述的基于环形链表的多线程消息数据存取方法。
[0021]本专利技术的有益效果为:1.通过建立环形链表,减少多个线程竞争同一资源,同时避免线程因锁机制等待CPU分配资源而降低工作效率。
[0022]本文档来自技高网...
【技术保护点】
【技术特征摘要】
1.基于环形链表的多线程消息数据存取方法,其特征在于,包括以下步骤:建立环形链表,所述环形链表包括若干个存储单元,若干个所述存储单元按次序呈环形排列;建立首指针寄存器和尾指针寄存器,所述首指针寄存器和尾指针寄存器分别存储Head指针和Tail指针,所述Head指针及所述Tail指针均赋予初始值;任一生产者写入消息时,对所述Head指针对应的存储单元执行CAS写操作,若成功将新值写入所述Head指针对应的存储单元,则所述Head指针及所述Tail指针分别自增1,若将新值写入所述Head指针对应的存储单元失败,则重新执行本步骤;消费者各自记录已读取消息对应的存储单元次序,记为已读取位置,消费者读取新的消息时,读取所述环形链表从已读取位置至所述Tail指针之间的全部存储单元存储的消息。2.根据权利要求1所述的基于环形链表的多线程消息数据存取方法,其特征在于,所述建立环形链表的方法包括:设置若干存储单元,所述存储单元包括存储区和指针,所述存储区用于存储消息,所述指针指向环形排列中下一次序的存储单元的地址,形成所述环形链表。3.根据权利要求1所述的基于环形链表的多线程消息数据存取方法,其特征在于,所述建立环形链表的方法包括:设置若干存储单元,所述存储单元包括存储区、前指针和后指针,所述存储区用于存储消息,所述前指针指向环形排列中前一次序的存储单元的地址,所述后指针指向环形排列中后一次序的存储单元的地址,形成所述环形链表。4.根据权利要求1
‑
3任一项所述的基于环形链表的多线程消息数据存取方法,其特征在于,对所述Head指针对应的存储单元执行CAS写操作包括:获取CAS机制的内存位置V、预期原值A及更新值B;将内存位置V的值与预期原值A的值对比,若V=A,则将所述内存位置V的值更新为更新值B,若V≠A,则不更新内存位置V。5.根据权利要求1所述的基于环形链表的多线程消息数据存取方法,其特征在于,所述Head指针自增1的方法包括:执行CAS写操作对所述Head指针加1。6.根据权利要求1所述的基于环形链表的多线程消息数据存取方法,其特征在于,所述Tail指针自增1的方法包括:执行CAS写操作对Tail指针加1。7.基于环形链表的多线程消息数据存取系统,其特征在于,所述系统包括:链表建立模块,所述链表建立模块执行以下步骤:建立环形链表,所述环形链表包括若干个存储单元,若干个所述存储单元按次序呈环形排...
【专利技术属性】
技术研发人员:于光远,王宏来,赵晶晶,冀天宇,
申请(专利权)人:天翼云科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。