CN114327828B - 一种共享数据的无锁并发访问方法、装置、设备及介质 - Google Patents
一种共享数据的无锁并发访问方法、装置、设备及介质 Download PDFInfo
- Publication number
- CN114327828B CN114327828B CN202111640943.7A CN202111640943A CN114327828B CN 114327828 B CN114327828 B CN 114327828B CN 202111640943 A CN202111640943 A CN 202111640943A CN 114327828 B CN114327828 B CN 114327828B
- Authority
- CN
- China
- Prior art keywords
- shared data
- target thread
- cpu core
- thread
- threads
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Multi Processors (AREA)
Abstract
本发明实施例公开了一种共享数据的并发访问方法、装置、设备及介质。该方法包括:在多个线程对可重启序列中的共享数据进行并发访问的情况下,从可重启序列结构体中获取上一次更新共享数据的CPU核ID;若接收到多个线程中的目标线程对共享数据进行更新的请求,且目标线程所在的CPU核ID与上一次更新所述共享数据的CPU核ID不同,对所述目标线程进行中断处理;在所述可重启序列结构体中,将上一次更新所述共享数据的CPU核ID替换成所述目标线程所在的CPU核ID,并基于所述请求对共享数据进行更新。通过本发明实施例的技术方案,能够实现在并发访问共享数据时高效地保证共享数据的原子性,减小了内存资源的浪费。
Description
技术领域
本发明实施例涉及操作系统技术领域,尤其涉及一种共享数据的并发访问方法、装置、设备及介质。
背景技术
随着互联网技术的普及推广,在多核中央处理器(Central Processing Unit,CPU)向同一共享资源中的共享数据进行并发访问时,对如何保持共享数据的原子性有了更高的要求。
现有技术中通常利用互斥锁(mutex)或自旋锁的方式来保证共享数据的原子性。然而,使用互斥锁或自旋锁的方式容易造成CPU资源的浪费。因此,在并发访问共享数据时,如何高效地保证共享数据的原子性,是目前亟待解决的问题。
发明内容
本发明实施例提供一种共享数据的并发访问方法、装置、设备及介质,可以实现在并发访问共享数据时高效地保证共享数据的原子性以及减小内存资源的浪费。
第一方面,本发明实施例提供了一种共享数据的并发访问方法,包括:
在多个线程对可重启序列中的共享数据进行并发访问的情况下,从可重启序列结构体中获取上一次更新所述共享数据的CPU核ID;
若接收到多个线程中的目标线程对所述共享数据进行更新的请求,且所述目标线程所在的CPU核ID与上一次更新所述共享数据的CPU核ID不同,对所述目标线程进行中断处理;
在所述可重启序列结构体中,将上一次更新所述共享数据的CPU核ID替换成所述目标线程所在的CPU核ID,并基于所述请求对所述共享数据进行更新。
第二方面,本发明实施例还提供了一种共享数据的无锁并发访问装置,该装置包括:
标识获取模块,用于在多个线程对可重启序列中的共享数据进行并发访问的情况下,从可重启序列结构体中获取上一次更新所述共享数据的CPU核ID;
中断处理模块,用于若接收到多个线程中的目标线程对所述共享数据进行更新的请求,且所述目标线程所在的CPU核ID与上一次更新所述共享数据的CPU核ID不同,对所述目标线程进行中断处理;
数据更新模块,用于在所述可重启序列结构体中,将上一次更新所述共享数据的CPU核ID替换成所述目标线程所在的CPU核ID,并基于所述请求对所述共享数据进行更新。
第三方面,本发明实施例还提供了一种计算机设备,所述计算机设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如本发明任一实施例所述的共享数据的无锁并发访问方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如本发明任一实施例所述的共享数据的无锁并发访问方法。
本发明实施例的技术方案通过在多个线程对可重启序列中的共享数据进行并发访问的情况下,将从可重启序列结构体中获取的上一次更新共享数据的CPU核ID与目标线程所在的CPU核ID进行比较,当目标线程所在的CPU核ID与上一次更新共享数据的CPU核ID不同,对目标线程进行中断处理,将上一次更新共享数据的CPU核ID替换成目标线程所在的CPU核ID,并基于请求对共享数据进行更新,解决了现有技术在对共享数据进行并发访时引起的资源浪费的问题,实现在并发访问共享数据时高效地保证共享数据的原子性以及减小内存资源浪费的效果。
附图说明
图1a是本发明实施例提供的一种共享数据的并发访问方法的流程图;
图1b是本发明实施例提供的一种重启序列结构体的结构示意图;
图2a是本发明实施例提供的一种共享数据的并发访问方法的流程图;
图2b是本发明实施例提供的一种优选的共享数据并发访问方法的流程图;
图3是本发明实施例提供的一种共享数据的并发访问装置的结构示意图;
图4是本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
随着互联网技术的普及推广,在多核CPU向同一共享资源中的共享数据进行并发访问时,通常采用以下两种方法来保持共享数据的原子性:
第一种方式,使用互斥锁来保证共享数据的原子性。互斥锁通常使用在多个线程同时访问一个共享资源的情形下。使用互斥锁的方式,同一时间只能有一个线程持有互斥锁并修改共享数据,其余线程进入等待状态。第二种方式,使用自旋锁来保证共享数据的原子性。如果共享数据已经有其他线程加锁了,当前线程会以死循环的方式等待锁,直到被访问的共享数据被释放锁。等待访问的线程立即获得锁并执行。自旋锁通常使用CPU的原子指令来实现,X86体系架构中,支持了比如原子加、原子减或原子读写等众多原子指令,指令前缀加上lock实现原子操作。
然而,若使用第一种方式等待锁的线程会进入休眠,进而引起CPU线程调度,消耗大量的CPU资源。若使用第二种方式在X86体系架构中无论是否存在多个线程的竞争关系,lock指令前缀都会无条件执行,通常lock前缀会通过锁定总线独占共享数据来保证原子性。但是当只有一个线程并使用了lock前缀时,CPU也会锁定总线,这样就造成CPU资源的浪费。而在ARM体系架构中,使用多组指令来提供原子操作,两个线程同时写入时,只有一个线程会成功,另一个线程则重新执行指令。
因此,为解决现有技术在对共享数据进行并发访时引起的资源浪费的问题,本发明实施例提供了一种共享数据的并发访问方法,以实现在并发访问共享数据时高效地保证共享数据的原子性以及减小内存资源浪费的效果。
图1a为本发明实施例提供的一种共享数据的并发访问方法的流程图,本实施例可适用于对共享数据进行并发访问的情况,该方法可以由共享数据的并发访问装置来执行,该装置可采用硬件和/或软件的方式实现,并一般可以集成在计算机设备中。
如图1a所示,本发明实施例提供的一种共享数据的并发访问方法包括以下具体步骤:
S110:在多个线程对可重启序列中的共享数据进行并发访问的情况下,从可重启序列结构体中获取上一次更新所述共享数据的CPU核ID。
其中,本发明实施例的技术方案可适用于多个线程对可重启序列中的共享数据进行并发访问时,使其中符合设定条件的一个线程对共享数据进行修改的情况。可重启序列可以指内核空间中用于对变量级别的数据进行保护的临界内存区,通常在系统中仅有一个可重启序列存在,可重启序列中不需要锁和任何原子操作。可重启序列结构体可以指用于描述可重启序列信息的结构体,如图1b所示为本发明实施例提供的一种重启序列结构体的结构示意图,其中,重启序列结构体包含了重启序列rseq_cs结构体以及重启序列rseq结构体,重启序列rseq_cs结构体中包含了可重启序列中各个程序的指令地址,以及中断处理程序的指令地址,start_ip表示可重启序列中准备程序的指令首地址,post_commit_ip表示可重启序列中提交程序的指令地址,abort_ip表示中断处理程序的指令地址,中断处理程序的指令地址要在可重启序列之外,即abort_ip大于post_commit_ip或小于start_ip。重启序列rseq结构体对重启序列rseq_cs结构体进行了引用,并存储有cpu_id,其中,cpu_id表示上一次更新共享数据的CPU核ID。并发访问可以指多个线程同时对可重启序列中的共享数据进行访问。
S120:若接收到多个线程中的目标线程对所述共享数据进行更新的请求,且所述目标线程所在的CPU核ID与上一次更新所述共享数据的CPU核ID不同,对所述目标线程进行中断处理。
其中,目标线程可以指对可重启序列中的共享数据进行并发访问的多个线程中符合设定条件的线程,例如,优先级最高的线程或者与上一次更新所述共享数据的CPU核ID(IDentification,身份标识号码)相同的线程。在一个可选的实施方式中,若多个线程中所在的CPU核ID与上一次更新所述共享数据的CPU核ID均不相同,基于优先级在多个线程中确定目标线程。其中,基于优先级在多个线程中确定目标线程可以指将多个线程中优先级最高的线程作为目标线程。具体的,当多个线程对可重启序列中的共享数据进行并发访问时,多个线程中所在的CPU核ID与上一次更新所述共享数据的CPU核ID均不相同,则将多个线程中优先级最高的线程作为目标线程。在另一个可选的实施方式中,若多个线程中所在的CPU核ID与上一次更新所述共享数据的CPU核ID均不相同,还可以按照多个线程对共享数据的访问顺序,将访问顺序较前的线程作为目标线程。由此,避免多个线程同时对同一共享数据进行更新时,造成共享数据原子性无法得到保证的问题。
其中,中断处理可以指根据中断处理程序对目标线程的访问过程进行中断。在一个可选的实施方式中,所述对所述目标线程进行中断处理包括:从可重启序列结构体中获取中断处理程序的指令地址,并根据所述中断处理程序的指令地址调用中断程序中断所述目标线程。示例性的,根据可重启序列结构体中中断处理程序的指令地址abort_ip调用可重启序列中的中断处理程序,对目标线程的访问过程进行中断处理。具体的,中断处理程序中通常会更新start_ip,post_commit_ip以及abort_ip。由此,可以实现对目标线程的中断处理,便于后续操作的进行。
S130:在所述可重启序列结构体中,将上一次更新所述共享数据的CPU核ID替换成所述目标线程所在的CPU核ID,并基于所述请求对所述共享数据进行更新。
其中,更新可以指根据目标线程对共享数据进行更新的请求,对共享数据进行相应的更改,以得到更新后的共享数据。将上一次更新所述共享数据的CPU核ID替换成所述目标线程所在的CPU核ID可以指将可重启序列结构体中上一次更新所述共享数据的CPU核ID设置为目标线程所在的CPU核ID,由此,可以使得目标线程对可重启序列中的共享数据继续更新,并且可以告知其他线程共享数据正在被目标线程进行更新,暂时不要再对共享数据进行更新,避免了不必要的资源浪费。
在一个可选的实施方式中,若接收到所述目标线程对所述共享数据进行更新的请求,且所述目标线程所在的CPU核ID与上一次更新所述共享数据的CPU核ID相同,直接基于所述请求对所述共享数据进行更新。示例性的,若多个对共享资源进行访问的线程中存在与上一次更新共享数据的CPU核ID相同的目标线程,则无需进行中断处理,直接根据目标线程的访问请求对共享数据进行更新操作。由此,实现目标线程所在的CPU核ID与上一次更新共享数据的CPU核ID相同的情况下,高效的保证共享数据的原子性。
本发明实施例的技术方案通过在多个线程对可重启序列中的共享数据进行并发访问的情况下,将从可重启序列结构体中获取的上一次更新共享数据的CPU核ID与目标线程所在的CPU核ID进行比较,当目标线程所在的CPU核ID与上一次更新共享数据的CPU核ID不同,对目标线程进行中断处理,将上一次更新共享数据的CPU核ID替换成目标线程所在的CPU核ID,并基于请求对共享数据进行更新,解决了现有技术在对共享数据进行并发访时引起的资源浪费的问题,实现在并发访问共享数据时高效地保证共享数据的原子性以及减小内存资源浪费的效果。
图2a为本发明实施例提供的一种共享数据并发访问方法的流程图。在本实施例中,可选的,所述基于所述请求对所述共享数据进行更新包括:获取所述共享数据,并对所述共享数据进行更改,使用CPU中的单条指令将所述更改后的共享数据存储至可重启序列。
如图2a所示,本发明实施例提供的一种共享数据并发访问方法包括以下具体步骤:
S210:在多个线程对可重启序列中的共享数据进行并发访问的情况下,从可重启序列结构体中获取上一次更新所述共享数据的CPU核ID。
S220:若接收到多个线程中的目标线程对所述共享数据进行更新的请求,且所述目标线程所在的CPU核ID与上一次更新所述共享数据的CPU核ID不同,对所述目标线程进行中断处理。
S230:在所述可重启序列结构体中,将上一次更新所述共享数据的CPU核ID替换成所述目标线程所在的CPU核ID。
S240:获取所述共享数据,并对所述共享数据进行更改,使用CPU中的单条指令将所述更改后的共享数据存储至可重启序列。
其中,更改可以指对共享数据进行相应的改写。单条指令可以指CPU中的一条指令,用于将更改后的共享数据存储至可重启序列,由于可重启序列必须遵循一些限制,因此,存储操作必须是一条指令,可重启序列中的代码不能调用它之外的任何代码,使得存储过程无法被其他因素打断,保证了共享数据的原子性。
在一个可选的实施方式中,在使用CPU中的单条指令将所述更改后的共享数据存储至可重启序列之前,还包括:若监控到目标线程被迁移至其他中央处理器、所述目标线程接收到其他线程发送的中断信号或者所述目标线程被优先级高于所述目标线程的线程抢占,对所述目标线程进行中断处理。其中,中断信号可以指由其他线程向目标线程发送的singal信号,由此实现了对目标线程的中断。抢占可以指比目标线程优先级更高的线程需要对共享数据进行访问,对目标线程的访问过程进行抢先占用。具体的,若在使用CPU中的单条指令将更改后的共享数据存储至可重启序列之前,监控到目标线程被迁移至其他中央处理器、所述目标线程接收到其他线程发送的中断信号或者所述目标线程被优先级高于所述目标线程的线程抢占,则从可重启序列结构体中获取中断处理程序的指令地址,并根据中断处理程序的指令地址调用中断程序中断目标线程。
在另一个可选的实施方式中,所述对所述目标线程进行中断处理之后,还包括:若所述目标线程被优先级高于所述目标线程的线程抢占,将所述优先级高于所述目标线程的线程作为目标线程,并返回执行从可重启序列结构体中获取上一次更新所述共享数据的CPU核ID的步骤。具体的,若目标线程被优先级高于所述目标线程的线程抢占,对目标线程进行中断处理并将优先级高于目标线程的线程作为目标线程,重新从可重启序列结构体中获取上一次更新共享数据的CPU核ID,之后,将目标线程所在的CPU核ID与上一次更新所述共享数据的CPU核ID进行比较,若目标线程所在的CPU核ID与上一次更新共享数据的CPU核ID相同,直接基于请求对共享数据进行更新;若目标线程所在的CPU核ID与上一次更新共享数据的CPU核ID不同,则在可重启序列结构体中,将上一次更新所述共享数据的CPU核ID替换成目标线程所在的CPU核ID,并基于请求对共享数据进行更新。由此可以实现优先级高于目标线程的线程可以优先进行共享数据的更新,解决了现有技术中通过关中断/关调度的方式来保证共享数据的原子性,导致目标线程对共享数据进行更新的过程中其他线程无法及时对共享数据进行更新所引起的系统实时性降低的问题。
本发明实施例的技术方案通过在多个线程对可重启序列中的共享数据进行并发访问的情况下,将从可重启序列结构体中获取的上一次更新共享数据的CPU核ID与目标线程所在的CPU核ID进行比较,当目标线程所在的CPU核ID与上一次更新共享数据的CPU核ID不同,对目标线程进行中断处理,将上一次更新共享数据的CPU核ID替换成目标线程所在的CPU核ID,之后,获取共享数据,并对共享数据进行更改,最后,使用CPU中的单条指令将更改后的共享数据存储至可重启序列,解决了现有技术在对共享数据进行并发访时引起的资源浪费的问题,实现在并发访问共享数据时高效地保证共享数据的原子性以及减小内存资源浪费的效果。
图2b为本发明实施例提供的一种优选的共享数据并发访问方法的流程图。如图2b所示,当进入准备阶段时,检查上一次更新所述共享数据的CPU核ID与各个线程的CPU核ID是否相同,若各个线程的CPU核ID均不存在与上一次更新所述共享数据的CPU核ID相同的线程,则将多个线程中优先级较高的线程作为目标线程;进入终止阶段,中断目标线程并利用中断处理程序更新start_ip,post_commit_ip,abort_ip以及并设置上一次更新所述共享数据的CPU核ID为目标线程所在的CPU核ID,重新进入准备阶段;若各个线程的CPU核ID中存在与上一次更新所述共享数据的CPU核ID相同的线程,则获取共享数据并对共享数据进行更新,之后进入提交阶段将共享数据写入内存(即可重启序列)中。由此,可以实现在并发访问共享数据时高效地保证共享数据的原子性以及减小内存资源浪费的效果。
图3为本发明实施例提供的一种共享数据的并发访问装置的结构示意图,该装置可以执行上述各实施例中涉及到的共享数据的并发访问方法。该装置可采用软件和/或硬件的方式实现,如图3所示,所述共享数据的并发访问装置具体包括:标识获取模块310、中断处理模块320、数据更新模块330。
其中,标识获取模块310,用于在多个线程对可重启序列中的共享数据进行并发访问的情况下,从可重启序列结构体中获取上一次更新所述共享数据的CPU核ID;
中断处理模块320,用于若接收到多个线程中的目标线程对所述共享数据进行更新的请求,且所述目标线程所在的CPU核ID与上一次更新所述共享数据的CPU核ID不同,对所述目标线程进行中断处理;
第一更新模块330,用于在所述可重启序列结构体中,将上一次更新所述共享数据的CPU核ID替换成所述目标线程所在的CPU核ID,并基于所述请求对所述共享数据进行更新。
本发明实施例的技术方案通过在多个线程对可重启序列中的共享数据进行并发访问的情况下,将从可重启序列结构体中获取的上一次更新共享数据的CPU核ID与目标线程所在的CPU核ID进行比较,当目标线程所在的CPU核ID与上一次更新共享数据的CPU核ID不同,对目标线程进行中断处理,将上一次更新共享数据的CPU核ID替换成目标线程所在的CPU核ID,并基于请求对共享数据进行更新,解决了现有技术在对共享数据进行并发访时引起的资源浪费的问题,实现在并发访问共享数据时高效地保证共享数据的原子性以及减小内存资源浪费的效果。
可选的,共享数据的无锁并发访问装置还包括目标线程确定模块,用于若多个线程中所在的CPU核ID与上一次更新所述共享数据的CPU核ID均不相同,基于优先级在多个线程中确定目标线程。
可选的,共享数据的无锁并发访问装置还包括第二更新模块,用于若接收到所述目标线程对所述共享数据进行更新的请求,且所述目标线程所在的CPU核ID与上一次更新所述共享数据的CPU核ID相同,直接基于所述请求对所述共享数据进行更新。
可选的,中断处理模块320具体可以用于从可重启序列结构体中获取中断处理程序的指令地址,并根据所述中断处理程序的指令地址调用中断程序中断所述目标线程。
可选的,数据更新模块330可以包括数据存储单元,用于获取所述共享数据,并对所述共享数据进行更改,使用CPU中的单条指令将所述更改后的共享数据存储至可重启序列。
可选的,共享数据的并发访问装置还包括线程监控模块,用于在使用CPU中的单条指令将所述更改后的共享数据存储至可重启序列之前,若监控到目标线程被迁移至其他中央处理器、所述目标线程接收到其他线程发送的中断信号或者所述目标线程被优先级高于所述目标线程的线程抢占,对所述目标线程进行中断处理。
可选的,共享数据的并发访问装置还包括接续处理模块,用于对所述目标线程进行中断处理之后,若所述目标线程被优先级高于所述目标线程的线程抢占,将所述优先级高于所述目标线程的线程作为目标线程,并返回执行从可重启序列结构体中获取上一次更新所述共享数据的CPU核ID的步骤。
本发明实施例所提供的共享数据的并发访问装置可执行本发明任意实施例所提供的共享数据的并发访问方法,具备执行方法相应的功能模块和有益效果。
图4为本发明实施例提供的一种计算机设备的结构示意图,如图4所示,该计算机设备包括处理器410、存储器420、输入装置430和输出装置440;计算机设备中处理器410的数量可以是一个或多个,图4中以一个处理器410为例;计算机设备中的处理器410、存储器420、输入装置430和输出装置440可以通过总线或其他方式连接,图4中以通过总线连接为例。
存储器420作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的共享数据的并发访问方法对应的程序指令/模块(例如,共享数据的并发访问装置中的标识获取模块310、中断处理模块320和数据更新模块330)。处理器410通过运行存储在存储器420中的软件程序、指令以及模块,从而执行计算机设备的各种功能应用以及数据处理,即实现上述的共享数据的并发访问方法。
存储器420可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器420可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器420可进一步包括相对于处理器410远程设置的存储器,这些远程存储器可以通过网络连接至计算机设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置430可用于接收输入的数字或字符信息,以及产生与计算机设备的用户设置以及功能控制有关的键信号输入。输出装置440可包括显示屏等显示设备。
本发明实施例还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行一种共享数据的并发访问方法,该方法包括:
在多个线程对可重启序列中的共享数据进行并发访问的情况下,从可重启序列结构体中获取上一次更新所述共享数据的CPU核ID;
若接收到多个线程中的目标线程对所述共享数据进行更新的请求,且所述目标线程所在的CPU核ID与上一次更新所述共享数据的CPU核ID不同,对所述目标线程进行中断处理;
在所述可重启序列结构体中,将上一次更新所述共享数据的CPU核ID替换成所述目标线程所在的CPU核ID,并基于所述请求对所述共享数据进行更新。
当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的共享数据的并发访问方法中的相关操作。
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory, ROM)、随机存取存储器(RandomAccess Memory, RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
值得注意的是,上述共享数据的并发访问装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (10)
1.一种共享数据的无锁并发访问方法,其特征在于,包括:
在多个线程对可重启序列中的共享数据进行并发访问的情况下,从可重启序列结构体中获取上一次更新所述共享数据的CPU核ID;
其中,所述可重启序列结构体指用于描述可重启序列信息的结构体;
若接收到多个线程中的目标线程对所述共享数据进行更新的请求,且所述目标线程所在的CPU核ID与上一次更新所述共享数据的CPU核ID不同,对所述目标线程进行中断处理;
当多个线程对可重启序列中的共享数据进行并发访问时,多个线程中所在的CPU核ID与上一次更新所述共享数据的CPU核ID均不相同,则将多个线程中优先级最高的线程作为目标线程;或者
若多个线程中所在的CPU核ID与上一次更新所述共享数据的CPU核ID均不相同,按照多个线程对共享数据的访问顺序,将访问顺序较前的线程作为目标线程;
在所述可重启序列结构体中,将上一次更新所述共享数据的CPU核ID替换成所述目标线程所在的CPU核ID,并基于所述请求对所述共享数据进行更新;
若多个对共享资源进行访问的线程中存在与上一次更新共享数据的CPU核ID相同的目标线程,则无需进行中断处理,直接根据目标线程的访问请求对共享数据进行更新操作。
2.根据权利要求1所述的方法,其特征在于,还包括:
若多个线程中所在的CPU核ID与上一次更新所述共享数据的CPU核ID均不相同,基于优先级在多个线程中确定目标线程。
3.根据权利要求1所述的方法,其特征在于,还包括:
若接收到所述目标线程对所述共享数据进行更新的请求,且所述目标线程所在的CPU核ID与上一次更新所述共享数据的CPU核ID相同,直接基于所述请求对所述共享数据进行更新。
4.根据权利要求1所述的方法,其特征在于,所述对所述目标线程进行中断处理包括:
从可重启序列结构体中获取中断处理程序的指令地址,并根据所述中断处理程序的指令地址调用中断程序中断所述目标线程。
5.根据权利要求1所述的方法,其特征在于,所述基于所述请求对所述共享数据进行更新包括:
获取所述共享数据,并对所述共享数据进行更改,使用CPU中的单条指令将所述更改后的共享数据存储至可重启序列。
6.根据权利要求5所述的方法,其特征在于,在使用CPU中的单条指令将所述更改后的共享数据存储至可重启序列之前,还包括:
若监控到目标线程被迁移至其他中央处理器、所述目标线程接收到其他线程发送的中断信号或者所述目标线程被优先级高于所述目标线程的线程抢占,对所述目标线程进行中断处理。
7.根据权利要求6所述的方法,其特征在于,所述对所述目标线程进行中断处理之后,还包括:
若所述目标线程被优先级高于所述目标线程的线程抢占,将所述优先级高于所述目标线程的线程作为目标线程,并返回执行从可重启序列结构体中获取上一次更新所述共享数据的CPU核ID的步骤。
8.一种共享数据的无锁并发访问装置,其特征在于,包括:
标识获取模块,用于在多个线程对可重启序列中的共享数据进行并发访问的情况下,从可重启序列结构体中获取上一次更新所述共享数据的CPU核ID;
其中,所述可重启序列结构体指用于描述可重启序列信息的结构体;
中断处理模块,用于若接收到多个线程中的目标线程对所述共享数据进行更新的请求,且所述目标线程所在的CPU核ID与上一次更新所述共享数据的CPU核ID不同,对所述目标线程进行中断处理;
当多个线程对可重启序列中的共享数据进行并发访问时,多个线程中所在的CPU核ID与上一次更新所述共享数据的CPU核ID均不相同,则将多个线程中优先级最高的线程作为目标线程;或者
若多个线程中所在的CPU核ID与上一次更新所述共享数据的CPU核ID均不相同,按照多个线程对共享数据的访问顺序,将访问顺序较前的线程作为目标线程;
数据更新模块,用于在所述可重启序列结构体中,将上一次更新所述共享数据的CPU核ID替换成所述目标线程所在的CPU核ID,并基于所述请求对所述共享数据进行更新;
若多个对共享资源进行访问的线程中存在与上一次更新共享数据的CPU核ID相同的目标线程,则无需进行中断处理,直接根据目标线程的访问请求对共享数据进行更新操作。
9.一种计算机设备,其特征在于,所述计算机设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-7中任一所述的共享数据的无锁并发访问方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-7中任一所述的共享数据的无锁并发访问方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111640943.7A CN114327828B (zh) | 2021-12-29 | 2021-12-29 | 一种共享数据的无锁并发访问方法、装置、设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111640943.7A CN114327828B (zh) | 2021-12-29 | 2021-12-29 | 一种共享数据的无锁并发访问方法、装置、设备及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114327828A CN114327828A (zh) | 2022-04-12 |
CN114327828B true CN114327828B (zh) | 2022-10-11 |
Family
ID=81016917
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111640943.7A Active CN114327828B (zh) | 2021-12-29 | 2021-12-29 | 一种共享数据的无锁并发访问方法、装置、设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114327828B (zh) |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107704324B (zh) * | 2017-07-20 | 2020-02-07 | 哈尔滨工业大学(威海) | 一种面向多核确定性的基于硬件的内存隔离方法 |
US10282307B1 (en) * | 2017-12-22 | 2019-05-07 | Dropbox, Inc. | Lock-free shared hash map |
CN109542832B (zh) * | 2018-11-30 | 2020-09-01 | 青岛方寸微电子科技有限公司 | 一种无锁机制的异构多核cpu间通信系统及方法 |
CN111176831B (zh) * | 2019-12-05 | 2023-05-02 | 西安交通大学 | 基于多线程共享内存通信的动态线程映射优化方法及装置 |
CN112631872B (zh) * | 2020-12-30 | 2024-02-23 | 上海金卓科技有限公司 | 一种多核系统的异常处理方法及装置 |
CN113778674A (zh) * | 2021-08-31 | 2021-12-10 | 上海弘积信息科技有限公司 | 一种负载均衡设备配置管理在多核下的免锁实现方法 |
-
2021
- 2021-12-29 CN CN202111640943.7A patent/CN114327828B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN114327828A (zh) | 2022-04-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8176489B2 (en) | Use of rollback RCU with read-side modifications to RCU-protected data structures | |
US7788668B2 (en) | System and method for implementing distributed priority inheritance | |
EP3701377B1 (en) | Method and apparatus for updating shared data in a multi-core processor environment | |
US8239871B2 (en) | Managing timeout in a multithreaded system by instantiating a timer object having scheduled expiration time and set of timeout handling information | |
US7698540B2 (en) | Dynamic hardware multithreading and partitioned hardware multithreading | |
RU2630171C2 (ru) | Способ начальной загрузки компьютерной системы с множеством центральных процессоров | |
US9003420B2 (en) | Resolving RCU-scheduler deadlocks | |
US5893157A (en) | Blocking symbol control in a computer system to serialize accessing a data resource by simultaneous processor requests | |
US8769546B2 (en) | Busy-wait time for threads | |
US9164799B2 (en) | Multiprocessor system | |
US8495642B2 (en) | Mechanism for priority inheritance for read/write locks | |
US20110185360A1 (en) | Multiprocessing transaction recovery manager | |
CN110162344B (zh) | 一种隔离限流的方法、装置、计算机设备及可读存储介质 | |
WO2011096163A1 (ja) | 情報処理システム、排他制御方法および排他制御用プログラム | |
CN111414256A (zh) | 基于麒麟移动操作系统的应用程序进程派生方法、系统及介质 | |
CN113360257B (zh) | 一种基于bios的信息操作方法、装置、存储介质及设备 | |
CN113806031A (zh) | 通过对象锁保护资源的方法和装置 | |
CN115495262A (zh) | 一种微内核操作系统及进程间消息的处理方法 | |
CN114327828B (zh) | 一种共享数据的无锁并发访问方法、装置、设备及介质 | |
JP6468053B2 (ja) | 情報処理装置、並列処理プログラム、及び、共有メモリアクセス方法 | |
US7702836B2 (en) | Parallel processing device and exclusive control method | |
US9619277B2 (en) | Computer with plurality of processors sharing process queue, and process dispatch processing method | |
CN113961366A (zh) | 操作系统的内核函数调用方法及计算机设备 | |
CN112612582B (zh) | 信号量功能实现方法和装置 | |
US10817349B2 (en) | Wake-up ordering of processing streams using sequential identifiers |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |