CN110781016A - 一种数据处理方法、装置、设备及介质 - Google Patents

一种数据处理方法、装置、设备及介质 Download PDF

Info

Publication number
CN110781016A
CN110781016A CN201911043428.3A CN201911043428A CN110781016A CN 110781016 A CN110781016 A CN 110781016A CN 201911043428 A CN201911043428 A CN 201911043428A CN 110781016 A CN110781016 A CN 110781016A
Authority
CN
China
Prior art keywords
thread
data
lock
shared cache
occupying
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.)
Granted
Application number
CN201911043428.3A
Other languages
English (en)
Other versions
CN110781016B (zh
Inventor
马凌
何昌华
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alipay Hangzhou Information Technology Co Ltd
Original Assignee
Alipay Hangzhou Information Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Alipay Hangzhou Information Technology Co Ltd filed Critical Alipay Hangzhou Information Technology Co Ltd
Priority to CN202110377343.XA priority Critical patent/CN112905365B/zh
Priority to CN201911043428.3A priority patent/CN110781016B/zh
Publication of CN110781016A publication Critical patent/CN110781016A/zh
Priority to PCT/CN2020/110753 priority patent/WO2021082665A1/zh
Application granted granted Critical
Publication of CN110781016B publication Critical patent/CN110781016B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本说明书实施例公开了一种数据处理方法、装置、设备及介质,数据处理方法包括:接收到待获锁线程的获锁请求时,通过处理器的共享缓存进行锁数据和待获锁线程的线程数据的交互,根据所述锁数据确定锁是否被占用;若否,则使所述待获锁线程获得锁;若是,则当占锁线程的目标线程数据满足预设条件时,使所述待获锁线程获得锁;和/或,接收到占锁线程的解锁请求时,确定所述占锁线程占锁前通过处理器的共享缓存与锁进行数据交互时,写入到所述共享缓存中的线程数据是否被更改;若被更改,则更改所述占锁线程的线程数据,使所述占锁线程解锁。

Description

一种数据处理方法、装置、设备及介质
技术领域
本申请涉及计算机技术领域,尤其涉及一种数据处理方法、装置、设备及介质。
背景技术
现有技术中,内存采用了锁机制来控制线程的访问,例如MCS锁,且线程在获取锁时,需要与锁进行数据交换,例如需要交换pending值。现有的锁机制,线程在与锁进行数据交换时,需要先确定需要进行交换的锁数据位于哪一级缓存,例如L1(第一级缓存)、L2(第二级缓存),然后才能去相应的缓存进行数据交换。另外,在前一线程要解锁时,需要等待自身的“指针”数据(info.next数据)被下一线程填入,然后将所述下一线程的pending值进行更改,这样前一线程才可以解锁,也即下一线程才可以获得锁,从而前后两个线程被捆绑在一起,相互影响;其中一个线程出错则会影响另一个线程的获锁或解锁。由此可见,现有的锁机制过程繁杂,运行效率低,进而临界区的执行效率低,冲突更大(即线程花费时间更久)。另外,现有的一些技术,例如RTM(Restricted Transactional Memory),可以帮助优化关键区域的性能,但是其仅仅是减少临界区域的粒度,在产生冲突的时候会产生更多延迟,同时实现难度较大。
有鉴于此,需要更有效和更高效的锁机制控制方案。
发明内容
本说明书实施例提供一种数据处理方法、装置、设备及介质,用以解决如何更有效和更高效地进行锁机制控制的技术问题。
为解决上述技术问题,本说明书实施例是这样实现的:
本说明书实施例提供一种数据处理方法,包括:
接收到待获锁线程的获锁请求时,通过处理器的共享缓存进行锁数据和待获锁线程的线程数据的交互,根据所述锁数据确定锁是否被占用;
若否,则使所述待获锁线程获得锁;
若是,则当占锁线程的目标线程数据满足预设条件时,使所述待获锁线程获得锁;
和/或,
接收到占锁线程的解锁请求时,确定所述占锁线程占锁前通过处理器的共享缓存与锁进行数据交互时,写入到所述共享缓存中的线程数据是否被更改;
若被更改,则更改所述占锁线程的线程数据,使所述占锁线程解锁。
本说明书实施例提供一种数据处理方法,包括:
接收到第一线程的获锁请求时,根据锁的与所述第一线程的第一数据对应的数据确定锁是否被占用,并将所述第一数据写入处理器的共享缓存中所述锁的缓存行;
若否,则使所述第一线程获取锁;
若是,则当占锁线程的目标线程数据满足预设条件时,使所述第一线程获取锁;
接收到所述第一线程的解锁请求时,确定所述共享缓存中是否存在所述第一数据;
若不存在,则更改所述第一线程的所述第一数据,使所述第一线程解锁;
若存在,则更改共享缓存中的所述第一数据,使所述第一线程解锁。
本说明书实施例提供一种数据处理装置,包括:
加锁模块,用于接收到待获锁线程的获锁请求时,通过处理器的共享缓存进行锁数据和待获锁线程的线程数据的交互,根据所述锁数据确定锁是否被占用;以及,若锁未被占用,则使所述待获锁线程获得锁;若锁被占用,则当占锁线程的目标线程数据满足预设条件时,使所述待获锁线程获得锁;
和/或,
解锁模块,用于接收到占锁线程的解锁请求时,确定所述占锁线程占锁前通过处理器的共享缓存与锁进行数据交互时,写入到所述共享缓存中的线程数据是否被更改;以及,用于若在交互时写入所述共享缓存的线程数据被更改,则更改所述占锁线程的线程数据,使所述占锁线程解锁。
本说明书实施例提供一种数据处理装置,包括:
加锁模块,用于接收到第一线程的获锁请求时,根据锁的与所述第一线程的第一数据对应的数据确定锁是否被占用,并将所述第一数据写入处理器的共享缓存中所述锁的缓存行;以及,若锁未被占用,则使所述第一线程获得锁;若锁被占用,则当占锁线程的目标线程数据满足预设条件时,使所述第一线程获取锁;
解锁模块,用于接收到所述第一线程的解锁请求时,确定所述共享缓存中是否存在所述第一数据;以及,用于若不存在所述第一数据,则更改所述第一线程的所述第一数据,使所述第一线程解锁;以及,用于若存在所述第一数据,则更改共享缓存中的所述第一数据,使所述第一线程解锁。
本说明书实施例提供一种数据处理设备,包括:
至少一个处理器;
以及,
与所述至少一个处理器通信连接的存储器;
其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,使所述至少一个处理器能够:
接收到待获锁线程的获锁请求时,通过处理器的共享缓存进行锁数据和待获锁线程的线程数据的交互,根据所述锁数据确定锁是否被占用;
若否,则使所述待获锁线程获得锁;
若是,则当占锁线程的目标线程数据满足预设条件时,使所述待获锁线程获得锁;
和/或,
接收到占锁线程的解锁请求时,确定所述占锁线程占锁前通过处理器的共享缓存与锁进行数据交互时,写入到所述共享缓存中的线程数据是否被更改;
若被更改,则更改所述占锁线程的线程数据,使所述占锁线程解锁。
本说明书实施例提供一种数据处理设备,包括:
至少一个处理器;
以及,
与所述至少一个处理器通信连接的存储器;
其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,使所述至少一个处理器能够:
接收到第一线程的获锁请求时,根据锁的与所述第一线程的第一数据对应的数据确定锁是否被占用,并将所述第一数据写入处理器的共享缓存中所述锁的缓存行;
若否,则使所述第一线程获取锁;
若是,则当占锁线程的目标线程数据满足预设条件时,使所述第一线程获取锁;
接收到所述第一线程的解锁请求时,确定所述共享缓存中是否存在所述第一数据;
若不存在,则更改所述第一线程的所述第一数据,使所述第一线程解锁;
若存在,则更改共享缓存中的所述第一数据,使所述第一线程解锁。
本说明书实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令被处理器执行时实现如下的步骤:
接收到待获锁线程的获锁请求时,通过处理器的共享缓存进行锁数据和待获锁线程的线程数据的交互,根据所述锁数据确定锁是否被占用;
若否,则使所述待获锁线程获得锁;
若是,则当占锁线程的目标线程数据满足预设条件时,使所述待获锁线程获得锁;
和/或,
接收到占锁线程的解锁请求时,确定所述占锁线程占锁前通过处理器的共享缓存与锁进行数据交互时,写入到所述共享缓存中的线程数据是否被更改;
若被更改,则更改所述占锁线程的线程数据,使所述占锁线程解锁。
本说明书实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令被处理器执行时实现如下的步骤:
接收到第一线程的获锁请求时,根据锁的与所述第一线程的第一数据对应的数据确定锁是否被占用,并将所述第一数据写入处理器的共享缓存中所述锁的缓存行;
若否,则使所述第一线程获取锁;
若是,则当占锁线程的目标线程数据满足预设条件时,使所述第一线程获取锁;
接收到所述第一线程的解锁请求时,确定所述共享缓存中是否存在所述第一数据;
若不存在,则更改所述第一线程的所述第一数据,使所述第一线程解锁;
若存在,则更改共享缓存中的所述第一数据,使所述第一线程解锁。
本说明书实施例采用的上述至少一个技术方案能够达到以下有益效果:
在锁机制控制过程中,数据交换都通过共享缓存进行,能够避免锁冗余复杂的迁移,加速临界区执行,减少冲突的发生,同时在产生冲突的过程中避免产生回滚,能够简化锁控制流程,提高锁控制效率。
附图说明
为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对本说明书实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本说明书第一个实施例中的数据处理方法的流程示意图。
图2是本说明书第一个实施例中的数据处理方法的应用示意图。
图3是本说明书第一个实施例中的获锁过程示意图。
图4是本说明书第二个实施例中的数据处理方法的流程示意图
图5是本说明书第二个实施例中的解锁过程示意图。
图6是本说明书第三个实施例中的数据处理方法的流程示意图。
图7是本说明书第四个实施例中的数据处理装置的结构示意图。
图8是本说明书第五个实施例中的数据处理装置的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本说明书实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
现有技术中,比较常用的MCS锁的运行过程为:线程有info.next(指针)和info.pending两个变量,当某线程(不妨记为线程A)要获取锁时,线程A与锁进行数据交互,读取锁数据,并将自己的数据写入锁的缓存行;根据读取到的锁数据判断锁是否被占用;若未被占用,则线程A获得锁;若被占用,由于当前占用锁的线程(简称“占锁线程”)也与锁进行过数据交互,则线程A通过读取的锁数据得到当前占锁线程的私有数据地址,进而将自己的私有数据地址填入当前占锁线程的info.next变量中,并等待当前占锁线程更改线程A的info.pending值(占锁线程通过info.next变量得到了线程A的私有数据地址,进而可以更改线程A的数据);若线程A的info.pending值被更改,则占锁线程解锁,线程A可以获得锁。
当某占锁线程(不妨记为线程B)需要解锁时,需要判断自己占锁前与锁进行交互时写入锁的缓存行的数据是否被更改;若否,说明无其他线程要获取锁,则清空自己占锁前与锁进行交互时写入锁的缓存行的数据,线程B解锁;若是,说明有其他线程在申请锁(其他线程获取锁会与锁数据交互,其他线程写入锁缓存行的数据会覆盖线程B写入锁缓存行的数据),则只有线程B的info.next变量被其他线程写入时,可以通过info.next确定想要获取锁的线程数据地址,进而更改想要获取锁的线程的info.pending值,从而线程B解锁,其他线程获取锁。
由上可知,前后两个想要获取锁的线程之间被捆绑在一起,相互影响,只有后一个线程将自身数据地址写入前一线程的info.next,且前一线程更改后一线程的info.pending值时,前一线程才能解锁,后一线程才能获取锁,其中一方出错则锁机制无法运行。
处理器具有私有缓存和共享缓存。其中处理器的各个处理器核读取到的数据都可以写入共享缓存,各个处理器核也都可以对共享缓存中的数据进行读取。每个处理器核都有各自的私有缓存,对任一处理器核,该处理器核的私有缓存的数据是其他处理器核无法读取的,其他处理器核也无法将数据写入该处理器核的私有缓存中。现有技术中,对任一线程,其想要获取锁而与锁进行数据交互时,会把锁数据迁移到自身对应的处理器核的某一级私有缓存中,便于下一次自己想要获取锁时与锁进行数据交互。这样一来,下个想要获取锁的线程要与锁进行数据交互,就要先向共享缓存询问确定锁数据位于哪一个处理器核的哪一级缓存,进而共享缓存向存储有锁数据的处理器核发出指令,使其将锁数据发送到“所述下个想要获取锁的线程”所对应的处理器核,所述下个想要获取锁的线程”所对应的处理器核将锁数据存储到自己的私有缓存,从而“所述下个想要获取锁的线程”在自己的私有缓存中与锁进行数据交互(同样是为了便于下一次自己想要获取锁时与锁进行数据交互)。有鉴于此,现有的锁机制过程繁杂,且锁数据需要不断迁移,从而运行效率低,临界区的执行效率低,冲突更大。
如图1所示,本说明书第一个实施例提供了一种数据处理方法。本实施例的执行主体可以是计算机或者服务器或者相应的数据处理系统或共享缓存控制单元,即执行主体可以是多种多样的,可以根据实际情况进行设置或者变换。另外,也可以有第三方应用程序协助所述执行主体执行本实施例;例如图2所示,可以由服务器来执行本实施例中的数据处理方法,并且还可以在(用户所持有的)终端(包括但不限于手机、计算机)上安装相应的应用程序,服务器与应用程序对应,服务器与用户所持有的终端之间可以进行数据传输,通过应用程序来向用户进行页面以及信息展示或输入输出。
如图1所示,本实施例中的数据处理方法包括:
S101:接收到待获锁线程的获锁请求时,通过处理器的共享缓存进行锁数据和待获锁线程的线程数据的交互,根据所述锁数据确定锁是否被占用。
在本实施例中,接收到任一线程(不妨记为线程C)对锁的获取请求(线程C可以称为“待获锁线程”,对锁的获取请求可以称为“获锁请求”)后,需要进行线程C的线程数据和锁数据的交互(或交换)。特别的,是通过共享缓存(可以是处理器的共享缓存)进行线程数据与锁数据的交互,即锁的数据(锁的数据可以设置为16字节或以上)是存储在共享缓存中的。其中,共享缓存可以是最后一级缓存(Last Level Cache,LLC),从而执行主体可以是最后一级缓存的控制单元。
本实施例中,线程C携带有相应的数据,其所携带的数据包括但不限于线程C的私有数据地址和私有数据(即私有数据的内容)。私有数据可以是线程C的pending值(或标志位值),pending值初始可以默认为0,并且可以是变化的。另外,私有数据地址和私有数据都可以是8字节或以上。此外,可以为线程C设置一个初始化结构struct mcs_info{longpending;/*8字节*/}。
线程C的用于与锁数据进行交互的线程数据(以下将用于与锁数据进行交互的线程数据称为“线程交互数据”)包括但不限于上述的私有数据地址和私有数据,即可以将私有数据地址和私有数据整理成线程交互数据,例如可以使用value=&info.pending<<64|info.pending来形成线程交互数据,本实施例对此不作限定。线程交互数据和用于与线程交互数据进行交互的锁数据(以下将用于与线程交互数据进行交互的锁数据称为“锁交互数据”)字节相同。锁交互数据的初始化内容可以为空。
通过处理器的共享缓存进行锁数据和待获锁线程的线程数据的交互包括:一方面从共享缓存中读取锁交互数据,读取出的锁交互数据返回到线程C对应的流水线(即线程C所在的处理器的流水线);另一方面将线程C的线程交互数据写入共享缓存中所述锁的缓存行,即用线程C的线程交互数据覆盖共享缓存中的锁交互数据。具体的,可以使用old=XCHG_OPT(&lock,&value)进行数据交互(old为锁交互数据),本实施例对此不作限定。线程交互数据属于线程数据,锁交互数据属于锁数据,线程交互数据与锁交互数据的交互即为线程数据与锁数据的交互。
本实施例中,可以根据锁交互数据确定锁是否被占用。具体的,根据锁交互数据确定锁是否被占用可以包括:若所述锁交互数据为空(例如锁数据仍是初始化状态,未被更改;或者虽然被更改过,但又回到了空的状态),则所述锁未被占用;若所述锁交互数据不为空(说明接收待获锁线程的获锁请求前,已经发生过线程与锁通过共享缓存进行的数据交互,使“与待获锁线程交互的锁交互数据”变成“上一个与锁进行数据交互的线程的线程交互数据”),则所述锁被占用。
S103:若所述锁未被占用,则使所述待获锁线程获得锁;若所述锁被占用,则当占锁线程的目标线程数据满足预设条件时,使所述待获锁线程获得锁。
若接收到线程C的获锁请求时,锁未被占用,则使线程C获得锁;若接收到线程C的获锁请求时,锁已被占用,则当占锁线程(即占用锁的线程)的目标线程数据满足预设条件时,使线程C获得锁,如图3所示。其中,对任一线程,该线程的目标线程数据属于“线程的用于与锁进行数据交互的线程数据”,即属于“线程的线程交互数据”。具体的,目标线程数据可以是线程的pending值(私有数据),即info.pending。本实施例中,当占锁线程的目标线程数据大于待获锁线程所得到的锁交互数据时,占锁线程的目标线程数据满足预设条件。具体的,待获锁线程所得到的锁交互数据包括占锁线程的pending值,若“占锁线程的pending值(目标线程数据)”大于“待获锁线程所得到的锁交互数据中的占锁线程的pending值”(待获锁线程所得到的锁交互数据中的占锁线程的pending值即“待获锁线程所得到的锁交互数据中的、与占锁线程的目标线程数据对应的数据”),就可以认为占锁线程的目标线程数据大于(待获锁线程所得到的)锁交互数据,就可以认为占锁线程的目标线程数据大于锁数据(锁交互数据属于锁数据)。
当线程C获得锁后,就可以进入临界区(或关键区域)进行相应的操作,例如对全局变量进行修改,本实施例对此不作限定。
任一线程想要获得锁时,都可以执行上述过程,通过共享缓存与锁进行数据交互,故本实施例中的共享缓存是可以是对任意多个线程共享的。对于不同的待获锁线程,锁的数据在共享缓存中无需迁移。
如图4所示,本说明书第二个实施例提供了一种数据处理方法,包括:
S105:接收到占锁线程的解锁请求时,确定所述占锁线程占锁前通过处理器的共享缓存与锁进行数据交互时,写入到所述共享缓存中的线程数据是否被更改。
当线程获得锁并执行完相应的操作后,会接收到线程的解锁请求。假设线程D是占锁线程,线程D从待获锁线程到占锁线程的过程中也会执行前述的S101、S103,故线程D也会与锁在共享缓存中进行数据交互。接收到线程D的解锁请求时,确定线程D占锁前通过共享缓存与锁交互数据时,写入共享缓存中的线程D的线程交互数据(写入共享缓存的线程D的线程交互数据也就是用于与线程D后的下一待获锁线程进行数据交互的锁交互数据)是否被更改。
S107:若写入共享缓存的线程数据被更改,则更改所述占锁线程的线程数据,使所述占锁线程解锁。
接收到线程D的解锁请求时,若共享缓存中被写入的线程D的线程交互数据被更改,说明在线程D之后还接收到其他线程(不妨记为线程E)的获锁请求,并发生了线程E的线程交互数据与锁交互数据的交互,使得共享缓存中的锁交互数据(即线程D的线程交互数据)被更改为线程E的线程交互数据(两个不同线程的私有数据地址不同,所以两个不同线程的线程交互数据不同)。这样,则更改线程D的线程数据,具体为更改线程D的线程交互数据,更具体为更改线程D的目标线程数据(目标线程数据同上),使作为锁拥有者的线程D解锁,线程D离开临界区,如图5所示。本实施例中,更改线程的线程交互数据可以包括:将线程的pending值加1,可以表示为私有数据地址->私有数据=私有数据地址->私有数据+1。
接收到线程D的解锁请求时,若共享缓存中被写入的线程D的线程交互数据未被更改线程D,说明在线程D与锁数据交互到接收到线程D的解锁请求之间没有其他线程与锁进行数据交互,即没有其他线程申请锁。这样,则更改共享缓存中的线程D的线程交互数据,使所述占锁线程解锁。更改共享缓存中的线程D的线程交互数据可以包括:将共享缓存中线程D的线程交互数据写为空(清空)。当下一线程要获取锁时,会发现锁交互数据为空,从而下一线程可以获得锁。如图5所示。
任一线程想要解锁时,都可以执行上述过程,通过共享缓存与锁进行数据交互,故本实施例中的共享缓存是可以是对任意多个线程共享的。对于不同的占锁线程,锁的数据在共享缓存中无需迁移。
下面以线程X和线程Y为例对第一和第二个实施例进行进一步说明:
假设接收线程Y的获锁请求早于接收线程X的获锁请求,当接收到线程X的获锁请求时,进行线程X的线程交互数据与锁交互数据的交互。那么:
(1)若接收线程X的获锁请求晚于接收线程Y的解锁请求,则接收线程Y的解锁请求时,线程X尚未与锁进行数据交互,写入共享缓存的线程Y的线程交互数据未被更改,则清空写入共享缓存的线程Y的线程交互数据。这样,接收到线程X的获锁请求时,将线程X的线程交互数据与锁交互数据进行交互,从共享缓存中读取锁交互数据,且读取到的锁交互数据为空,说明锁未被占用,线程X获得锁。
(2)若接收线程X的获锁请求早于接收线程Y的解锁请求,则接收线程X的获锁请求时,锁至少被线程Y占用(线程Y为占锁线程)。由于线程Y也进行本实施例的过程,即在接收到线程X的获锁请求时或接收线程X的获锁请求前,已经接收了线程Y的获锁请求,发生了线程Y的线程交互数据与锁交互数据的交互,共享缓存中的用于与线程X交互的锁交互数据已被覆盖为线程Y的线程交互数据(这与上述的“若锁交互数据不为空,则锁被占用”相呼应)。
接收到线程X的获锁请求时,通过共享缓存将线程X的线程交互数据与锁交互数据进行交互,从共享缓存中读取锁交互数据(锁交互数据即线程Y的线程交互数据)并放入线程X对应的流水线,从而线程X可以得到线程Y的线程交互数据,包括线程Y的私有数据地址和私有数据,并且共享缓存中的用于与其他线程交互的锁交互数据被更改为线程X的线程交互数据。
线程X可以等待线程Y的线程交互数据被更改(因为接收线程X的获锁请求早于接收线程Y的解锁请求,当接收到线程Y的解锁请求时,会发现写入共享缓存的线程Y的线程交互数据已更改为线程X的线程交互数据,从而会更改线程Y的线程数据,具体为更改线程Y的线程交互数据)。特别的,线程X可以使用while(线程Y的私有数据地址->线程Y的私有数据<=线程X获得的线程Y的私有数据)来进行等待;其中,while(线程Y的私有数据地址->线程Y的私有数据<=线程X获得的线程Y的私有数据)代表如果线程Y的私有数据小于等于“线程X所得到的线程Y的私有数据”,则线程X等待。由于能够从共享缓存读取到线程Y的私有数据地址,故线程X或执行主体可以(不断或者定时)通过线程Y的私有数据地址来获取线程Y的私有数据,进而可以(不断或者定时)比较线程Y的私有数据与“线程X所得到的线程Y的私有数据”的大小关系。
由于接收到线程Y的解锁请求时,会更改线程Y的线程交互数据,即将线程Y的pending值加1,那么占锁线程的目标线程数据大于线程X所得到的锁交互数据,即线程Y的私有数据大于“线程X获得的线程Y的私有数据”,从而一方面线程Y解锁,另一方面,while(线程Y的私有数据地址->线程Y的私有数据<=线程X获得的线程Y的私有数据)不再满足,使线程X获得锁。
上述的线程A、B、C、D、E、X、Y不特指某一线程,可以指代任意的线程。
上述实施例可以单独或结合或组合使用。
上述实施例公开了新的可用于锁机制控制的数据处理方法,在锁机制控制过程中,线程与锁的数据交换都通过共享缓存进行(由于线程交互数据是写入共享缓存,锁交互数据从共享缓存读取,故相当于线程与锁的数据交换都在共享缓存中进行),锁数据不需要在各个处理器核之间迁移,即避免了锁数据冗余复杂的迁移,从而线程与锁的数据交互耗时更短,效率更高,线程处理效率也更高。上述实施例中,为使占锁线程解锁或使其他线程能够获得锁,可以更改占锁线程的线程交互数据或更改共享缓存中的线程交互数据(共享缓存中的线程交互数据实际也就是锁交互数据),而待获锁的线程或执行主体可以通过占锁线程与锁的数据交互获得占锁线程的私有数据地址,进而获得占锁线程的线程交互数据变化(私有数据变化),这样占锁线程解锁时并不需要监测或顾及其他线程的数据变化,也不需要对其他线程的数据进行操作。可见,上述实施例能够加速临界区执行,减少线程耗时;能够简化锁控制流程,提高锁控制效率和线程处理效率;能够减少冲突的发生,同时在产生冲突的过程中避免产生回滚。
如图6所示,本说明书第三个实施例提供了一种数据处理方法,本实施例的执行主体可以参照第一个实施例。本实施例的数据处理方法包括:
S201:接收到第一线程的获锁请求时,根据锁的与所述第一线程的第一数据对应的数据确定锁是否被占用,并将所述第一数据写入处理器的共享缓存中所述锁的缓存行。
在本实施例中,第一线程可以相当于第一个实施例中的线程C,第一数据可以相当于第一个实施例中的线程交互数据,锁的“与第一线程的第一数据对应”的数据可以相当于第一个实施例中的锁交互数据,根据锁的与所述第一线程的第一数据对应的数据(即读取锁的与所述第一线程的第一数据对应的数据)确定锁是否被占用可以相当于第一个实施例中的根据锁交互数据确定锁是否被占用。
S203:若所述锁未被占用,则使第一线程获取锁;若所述锁被占用,则当占锁线程的目标线程数据满足预设条件时,使所述第一线程获取锁。
具体可参见第一个实施例。
本实施例中的“目标线程数据”同第一个实施例中的“目标线程数据”。
S205:接收到所述第一线程的解锁请求时,确定所述共享缓存中是否存在所述第一数据。
参见第一个实施例。
S207:若共享缓存中不存在所述第一数据,则更改所述第一线程的所述第一数据,使所述第一线程解锁;若共享缓存中存在所述第一数据,则更改共享缓存中的所述第一数据,使所述第一线程解锁。
参见第一个实施例。
本实施例中,第二线程为第一线程后的想要获取锁的线程,即接收第二线程的获锁请求晚于接收第一线程的获锁请求。接收到第二线程的获锁请求时,根据锁的“与所述第二线程的第二数据对应”的数据确定锁是否被占用,并将所述第二数据写入所述共享缓存中所述锁的缓存行;若否,则使所述第二线程获取所述锁;若是,则所述第一数据满足预设条件时,使所述第二线程获取所述锁。第二数据相当于第二线程的线程交互数据。
本实施例中,接收到所述第二线程的解锁请求时,确定所述缓存行中是否存在所述第二数据;
若不存在,则更改所述第二线程的所述第二数据,使所述第二线程解锁。
和/或,
接收到所述第二线程的解锁请求时,确定所述缓存行中是否存在所述第二数据;
若存在,则更改所述共享缓存中的第二数据,使所述第二线程解锁。
本实施例中,若接收所述第二线程的获锁请求早于接收所述第一线程的解锁请求,则所述锁的与所述第二数据对应的数据为所述第一数据;
和/或,
若接收所述第二线程的获锁请求晚于接收所述第一线程的解锁请求,锁的则所述锁的与所述第二数据对应的数据为对所述共享缓存中的第一数据进行更改后的数据。
本实施例中,根据锁的与所述第一线程的第一数据对应的数据确定锁是否被占用包括:
若锁的与所述第一线程的第一数据对应的数据为空,则所述锁未被占用;
若锁的与所述第一线程的第一数据对应的数据不为空,则所述锁被占用。
本实施例中,对任一数据(不作限定),若该数据大于与之对应的锁数据,则该数据满足预设条件。那么当占锁线程的目标线程数据大于与之对应的锁数据时,占锁线程的目标线程数据就满足预设条件;当第一数据大于与之对应的锁数据时,第一数据满足预设条件。
本实施例中,所述目标线程数据属于占锁线程用于写入共享缓存的数据。
本实施例中,所述共享缓存为最后一级缓存。
本实施例中,所述第一数据包括所述第一线程的私有数据地址和私有数据。
本实施例中,所述第一数据为所述第一线程的pending值。
本实施例中,更改所述第一线程的所述第一数据包括:
将所述第一线程的pending值加1。
本实施例中,所述第二数据为所述第二线程的pending值。
本实施例中,更改所述第二线程的所述第二数据包括:
将所述第二线程的pending值加1。
本实施例中,更改所述共享缓存中的第一数据包括:
将所述缓存行中的所述第一数据写为空。
本实施例中,更改所述共享缓存中的第二数据包括:
将所述缓存行中的所述第二数据写为空。
本实施例中未详细说明的内容可以参照第一个实施例。
本实施例中,第一线程、第二线程不特指某一线程,可以指代任意的线程。
本实施例公开了新的可用于锁机制控制的数据处理方法,在锁机制控制过程中,锁数据读取以及线程数据写入都通过共享缓存进行(第一数据或第二数据是写入共享缓存,与之对应的锁数据从共享缓存读取,故相当于数据读写都在共享缓存中进行),避免了锁数据冗余复杂的迁移;本实施例中,为使占锁线程解锁或使其他线程能够获得锁,可以更改占锁线程的数据(例如第一数据或第二数据)或更改共享缓存中的线程数据(例如第一数据或第二数据,实际已变成锁用于与线程交互的数据),而待获锁的线程或执行主体可以通过占锁线程与锁的数据交互获得占锁线程的私有数据地址,进而获得占锁线程的线程数据变化(私有数据变化),这样占锁线程解锁时并不需要监测或顾及其他线程的数据变化,也不需要对其他线程的数据进行操作。可见,上述实施例能够加速临界区执行,减少线程耗时;能够简化锁控制流程,提高锁控制效率;能够减少冲突的发生,同时在产生冲突的过程中避免产生回滚。
如图7所示,本说明书第四个实施例提供了一种数据处理装置,包括:
加锁模块301(或第一加锁模块301),用于接收到待获锁线程的获锁请求时,通过处理器的共享缓存进行锁数据和待获锁线程的线程数据的交互,根据所述锁数据确定锁是否被占用;以及,若锁未被占用,则使所述待获锁线程获得锁;若锁被占用,则当占锁线程的目标线程数据满足预设条件时,使所述待获锁线程获得锁;
解锁模块303(或第一解锁模块303),用于接收到占锁线程的解锁请求时,确定所述占锁线程占锁前通过处理器的共享缓存与锁进行数据交互时,写入到所述共享缓存中的线程数据是否被更改;以及,用于若在交互时写入所述共享缓存的线程数据被更改,则更改所述占锁线程的线程数据,使所述占锁线程解锁。
可选的,所述解锁模块303还用于:
接收到占锁线程的解锁请求时,若所述占锁线程占锁前通过共享缓存与锁交互数据时,写入到所述共享缓存中的线程数据未被更改,则更改共享缓存中的所述线程数据,使所述占锁线程解锁。
可选的,通过处理器的共享缓存进行锁数据和待获锁线程的线程数据的交互包括:
从共享缓存中读取用于交互的锁数据并放入所述线程对应的流水线;以及,
将用于交互的线程数据写入共享缓存中所述锁的缓存行。
可选的,根据所述锁数据确定锁是否被占用包括:
若所述锁数据为空,则所述锁未被占用;
若所述锁数据不为空,则所述锁被占用。
可选的,当占锁线程的目标线程数据大于所述锁数据时,所述目标线程数据满足预设条件。
可选的,所述目标线程数据属于占锁线程用于与锁进行数据交互的线程数据。
可选的,所述共享缓存为最后一级缓存。
可选的,所述线程数据包括所述线程的私有数据地址和私有数据。
可选的,所述私有数据为所述线程的pending值。
可选的,更改所述线程的所述线程数据包括:
将所述线程的pending值加1。
可选的,更改所述共享缓存中的线程数据包括:
将交互时写入所述共享缓存的线程数据写为空。
如图8所示,本说明书第五个实施例提供了一种数据处理装置,包括:
加锁模块401(或第二加锁模块401),用于接收到第一线程的获锁请求时,根据锁的与所述第一线程的第一数据对应的数据确定锁是否被占用,并将所述第一数据写入处理器的共享缓存中所述锁的缓存行;以及,若锁未被占用,则使所述第一线程获得锁;若锁被占用,则当占锁线程的目标线程数据满足预设条件时,使所述第一线程获取锁;
解锁模块403(或第二解锁模块403),用于接收到所述第一线程的解锁请求时,确定所述共享缓存中是否存在所述第一数据;以及,用于若不存在所述第一数据,则更改所述第一线程的所述第一数据,使所述第一线程解锁;以及,用于若存在所述第一数据,则更改共享缓存中的所述第一数据,使所述第一线程解锁。
可选的,所述加锁模块401还用于:
接收到第二线程的获锁请求时,根据锁的与所述第二线程的第二数据对应的数据确定锁是否被占用,并将所述第二数据写入所述共享缓存中所述锁的缓存行;
若否,则使所述第二线程获取所述锁;
若是,则所述第一数据满足预设条件时,使所述第二线程获取所述锁。
可选的,所述解锁模块403还用于:
接收到所述第二线程的解锁请求时,确定所述缓存行中是否存在所述第二数据;
若不存在,则更改所述第二线程的所述第二数据,使所述第二线程解锁。
和/或,
接收到所述第二线程的解锁请求时,确定所述缓存行中是否存在所述第二数据;
若存在,则更改所述共享缓存中的第二数据,使所述第二线程解锁。
可选的,若接收所述第二线程的获锁请求早于接收所述第一线程的解锁请求,则所述锁的与所述第二数据对应的数据为所述第一数据;
和/或,
若接收所述第二线程的获锁请求晚于接收所述第一线程的解锁请求,锁的则所述锁的与所述第二数据对应的数据为对所述共享缓存中的第一数据进行更改后的数据。
可选的,根据锁的与所述第一线程的第一数据对应的数据确定锁是否被占用包括:
若锁的与所述第一线程的第一数据对应的数据为空,则所述锁未被占用;
若锁的与所述第一线程的第一数据对应的数据不为空,则所述锁被占用。
可选的,对任一数据(不作限定),若该数据大于与之对应的锁数据,则该数据满足预设条件。那么当占锁线程的目标线程数据大于与之对应的锁数据时,占锁线程的目标线程数据就满足预设条件;当第一数据大于与之对应的锁数据时,第一数据满足预设条件。
可选的,所述目标线程数据属于占锁线程用于写入共享缓存的数据。
可选的,所述共享缓存为最后一级缓存。
可选的,所述第一数据包括所述第一线程的私有数据地址和私有数据。
可选的,所述第一数据为所述第一线程的pending值。
可选的,更改所述第一线程的所述第一数据包括:
将所述第一线程的pending值加1。
可选的,所述第二数据为所述第二线程的pending值。
可选的,更改所述第二线程的所述第二数据包括:
将所述第二线程的pending值加1。
可选的,更改所述共享缓存中的第一数据包括:
将所述缓存行中的所述第一数据写为空。
可选的,更改所述共享缓存中的第二数据包括:
将所述缓存行中的所述第二数据写为空。
本说明书第六个实施例提供一种数据处理设备,包括:
至少一个处理器;
以及,
与所述至少一个处理器通信连接的存储器;
其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,使所述至少一个处理器能够:
接收到待获锁线程的获锁请求时,通过处理器的共享缓存进行锁数据和待获锁线程的线程数据的交互,根据所述锁数据确定锁是否被占用;
若否,则使所述待获锁线程获得锁;
若是,则当占锁线程的目标线程数据满足预设条件时,使所述待获锁线程获得锁;
接收到占锁线程的解锁请求时,确定所述占锁线程占锁前通过处理器的共享缓存与锁进行数据交互时,写入到所述共享缓存中的线程数据是否被更改;
若被更改,则更改所述占锁线程的线程数据,使所述占锁线程解锁。
本说明书第七个实施例提供一种数据处理设备,包括:
至少一个处理器;
以及,
与所述至少一个处理器通信连接的存储器;
其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,使所述至少一个处理器能够:
接收到第一线程的获锁请求时,根据锁的与所述第一线程的第一数据对应的数据确定锁是否被占用,并将所述第一数据写入处理器的共享缓存中所述锁的缓存行;
若否,则使所述第一线程获取锁;
若是,则当占锁线程的目标线程数据满足预设条件时,使所述第一线程获取锁;
接收到所述第一线程的解锁请求时,确定所述共享缓存中是否存在所述第一数据;
若不存在,则更改所述第一线程的所述第一数据,使所述第一线程解锁;
若存在,则更改共享缓存中的所述第一数据,使所述第一线程解锁。
本说明书第八个实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令被处理器执行时实现如下的步骤:
接收到待获锁线程的获锁请求时,通过处理器的共享缓存进行锁数据和待获锁线程的线程数据的交互,根据所述锁数据确定锁是否被占用;
若否,则使所述待获锁线程获得锁;
若是,则当占锁线程的目标线程数据满足预设条件时,使所述待获锁线程获得锁;
接收到占锁线程的解锁请求时,确定所述占锁线程占锁前通过处理器的共享缓存与锁进行数据交互时,写入到所述共享缓存中的线程数据是否被更改;
若被更改,则更改所述占锁线程的线程数据,使所述占锁线程解锁。
本说明书第九个实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令被处理器执行时实现如下的步骤:
接收到第一线程的获锁请求时,根据锁的与所述第一线程的第一数据对应的数据确定锁是否被占用,并将所述第一数据写入处理器的共享缓存中所述锁的缓存行;
若否,则使所述第一线程获取锁;
若是,则当占锁线程的目标线程数据满足预设条件时,使所述第一线程获取锁;
接收到所述第一线程的解锁请求时,确定所述共享缓存中是否存在所述第一数据;
若不存在,则更改所述第一线程的所述第一数据,使所述第一线程解锁;
若存在,则更改共享缓存中的所述第一数据,使所述第一线程解锁。
上述各实施例可以结合使用。
上述对本说明书特定实施例进行了描述,其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,附图中描绘的过程不一定必须按照示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、设备、非易失性计算机可读存储介质实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本说明书实施例提供的装置、设备、非易失性计算机可读存储介质与方法是对应的,因此,装置、设备、非易失性计算机存储介质也具有与对应方法类似的有益技术效果,由于上面已经对方法的有益技术效果进行了详细说明,因此,这里不再赘述对应装置、设备、非易失性计算机存储介质的有益技术效果。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field Programmable GateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware DescrIP地址tion Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware DescrIP地址tion Language)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware DescrIP地址tion Language)、Lava、Lola、MyHDL、PALASM、RHDL(Ruby Hardware DescrIP地址tion Language)等,目前最普遍使用的是VHDL(Very-High-Speed Integrated Circuit Hardware DescrIP地址tion Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、MicrochIP地址PIC18F26K20以及Silicone LabsC8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本说明书时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本说明书实施例可提供为方法、系统、或计算机程序产品。因此,本说明书实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本说明书实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书是参照根据本说明书实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带式磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本说明书可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本说明书实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

Claims (32)

1.一种数据处理方法,包括:
接收到待获锁线程的获锁请求时,通过处理器的共享缓存进行锁数据和待获锁线程的线程数据的交互,根据所述锁数据确定锁是否被占用;
若否,则使所述待获锁线程获得锁;
若是,则当占锁线程的目标线程数据满足预设条件时,使所述待获锁线程获得锁;
和/或,
接收到占锁线程的解锁请求时,确定所述占锁线程占锁前通过处理器的共享缓存与锁进行数据交互时,写入到所述共享缓存中的线程数据是否被更改;
若被更改,则更改所述占锁线程的线程数据,使所述占锁线程解锁。
2.如权利要求1所述的方法,所述方法还包括:
接收到占锁线程的解锁请求时,若所述占锁线程占锁前通过共享缓存与锁交互数据时,写入到所述共享缓存中的线程数据未被更改,则更改共享缓存中的所述线程数据,使所述占锁线程解锁。
3.如权利要求1所述的方法,通过处理器的共享缓存进行锁数据和待获锁线程的线程数据的交互包括:
从共享缓存中读取用于交互的锁数据并放入所述线程对应的流水线;以及,
将用于交互的线程数据写入共享缓存中所述锁的缓存行。
4.如权利要求1所述的方法,根据所述锁数据确定锁是否被占用包括:
若所述锁数据为空,则所述锁未被占用;
若所述锁数据不为空,则所述锁被占用。
5.如权利要求1所述的方法,当占锁线程的目标线程数据大于所述锁数据时,所述目标线程数据满足预设条件。
6.如权利要求1至5中任一项所述的方法,所述目标线程数据属于占锁线程用于与锁进行数据交互的线程数据。
7.如权利要求1至5中任一项所述的方法,所述共享缓存为最后一级缓存。
8.如权利要求1至5中任一项所述的方法,所述线程数据包括所述线程的私有数据地址和私有数据。
9.如权利要求8所述的方法,所述私有数据为所述线程的pending值。
10.如权利要求9所述的方法,更改所述线程的所述线程数据包括:
将所述线程的pending值加1。
11.如权利要求2所述的方法,更改所述共享缓存中的线程数据包括:
将交互时写入所述共享缓存的线程数据写为空。
12.一种数据处理方法,包括:
接收到第一线程的获锁请求时,根据锁的与所述第一线程的第一数据对应的数据确定锁是否被占用,并将所述第一数据写入处理器的共享缓存中所述锁的缓存行;
若否,则使所述第一线程获取锁;
若是,则当占锁线程的目标线程数据满足预设条件时,使所述第一线程获取锁;
接收到所述第一线程的解锁请求时,确定所述共享缓存中是否存在所述第一数据;
若不存在,则更改所述第一线程的所述第一数据,使所述第一线程解锁;
若存在,则更改共享缓存中的所述第一数据,使所述第一线程解锁。
13.如权利要求12所述的方法,所述方法还包括:
接收到第二线程的获锁请求时,根据锁的与所述第二线程的第二数据对应的数据确定锁是否被占用,并将所述第二数据写入所述共享缓存中所述锁的缓存行;
若否,则使所述第二线程获取所述锁;
若是,则所述第一数据满足预设条件时,使所述第二线程获取所述锁。
14.如权利要求13所述的方法,所述方法还包括:
接收到所述第二线程的解锁请求时,确定所述缓存行中是否存在所述第二数据;
若不存在,则更改所述第二线程的所述第二数据,使所述第二线程解锁。
和/或,
接收到所述第二线程的解锁请求时,确定所述缓存行中是否存在所述第二数据;
若存在,则更改所述共享缓存中的第二数据,使所述第二线程解锁。
15.如权利要求13所述的方法,若接收所述第二线程的获锁请求早于接收所述第一线程的解锁请求,则所述锁的与所述第二数据对应的数据为所述第一数据;
和/或,
若接收所述第二线程的获锁请求晚于接收所述第一线程的解锁请求,锁的则所述锁的与所述第二数据对应的数据为对所述共享缓存中的第一数据进行更改后的数据。
16.如权利要求12至15中任一项所述的方法,根据锁的与所述第一线程的第一数据对应的数据确定锁是否被占用包括:
若锁的与所述第一线程的第一数据对应的数据为空,则所述锁未被占用;
若锁的与所述第一线程的第一数据对应的数据不为空,则所述锁被占用。
17.如权利要求12至15中任一项所述的方法,对任一数据,若该数据大于与之对应的锁数据,则该数据满足预设条件。
18.如权利要求12至15中任一项所述的方法,所述目标线程数据属于占锁线程用于写入共享缓存的数据。
19.如权利要求12至15中任一项所述的方法,所述共享缓存为最后一级缓存。
20.如权利要求12至15中任一项所述的方法,所述第一数据包括所述第一线程的私有数据地址和私有数据。
21.如权利要求12至15中任一项所述的方法,所述第一数据为所述第一线程的pending值。
22.如权利要求21所述的方法,更改所述第一线程的所述第一数据包括:
将所述第一线程的pending值加1。
23.如权利要求13至15中任一项所述的方法,所述第二数据为所述第二线程的pending值。
24.如权利要求23所述的方法,更改所述第二线程的所述第二数据包括:
将所述第二线程的pending值加1。
25.如权利要求12至15中任一项所述的方法,更改所述共享缓存中的第一数据包括:
将所述缓存行中的所述第一数据写为空。
26.如权利要求14所述的方法,更改所述共享缓存中的第二数据包括:
将所述缓存行中的所述第二数据写为空。
27.一种数据处理装置,包括:
加锁模块,用于接收到待获锁线程的获锁请求时,通过处理器的共享缓存进行锁数据和待获锁线程的线程数据的交互,根据所述锁数据确定锁是否被占用;以及,若锁未被占用,则使所述待获锁线程获得锁;若锁被占用,则当占锁线程的目标线程数据满足预设条件时,使所述待获锁线程获得锁;
和/或,
解锁模块,用于接收到占锁线程的解锁请求时,确定所述占锁线程占锁前通过处理器的共享缓存与锁进行数据交互时,写入到所述共享缓存中的线程数据是否被更改;以及,用于若在交互时写入所述共享缓存的线程数据被更改,则更改所述占锁线程的线程数据,使所述占锁线程解锁。
28.一种数据处理装置,包括:
加锁模块,用于接收到第一线程的获锁请求时,根据锁的与所述第一线程的第一数据对应的数据确定锁是否被占用,并将所述第一数据写入处理器的共享缓存中所述锁的缓存行;以及,若锁未被占用,则使所述第一线程获得锁;若锁被占用,则当占锁线程的目标线程数据满足预设条件时,使所述第一线程获取锁;
解锁模块,用于接收到所述第一线程的解锁请求时,确定所述共享缓存中是否存在所述第一数据;以及,用于若不存在所述第一数据,则更改所述第一线程的所述第一数据,使所述第一线程解锁;以及,用于若存在所述第一数据,则更改共享缓存中的所述第一数据,使所述第一线程解锁。
29.一种数据处理设备,包括:
至少一个处理器;
以及,
与所述至少一个处理器通信连接的存储器;
其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,使所述至少一个处理器能够:
接收到待获锁线程的获锁请求时,通过处理器的共享缓存进行锁数据和待获锁线程的线程数据的交互,根据所述锁数据确定锁是否被占用;
若否,则使所述待获锁线程获得锁;
若是,则当占锁线程的目标线程数据满足预设条件时,使所述待获锁线程获得锁;
和/或,
接收到占锁线程的解锁请求时,确定所述占锁线程占锁前通过处理器的共享缓存与锁进行数据交互时,写入到所述共享缓存中的线程数据是否被更改;
若被更改,则更改所述占锁线程的线程数据,使所述占锁线程解锁。
30.一种数据处理设备,包括:
至少一个处理器;
以及,
与所述至少一个处理器通信连接的存储器;
其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,使所述至少一个处理器能够:
接收到第一线程的获锁请求时,根据锁的与所述第一线程的第一数据对应的数据确定锁是否被占用,并将所述第一数据写入处理器的共享缓存中所述锁的缓存行;
若否,则使所述第一线程获取锁;
若是,则当占锁线程的目标线程数据满足预设条件时,使所述第一线程获取锁;
接收到所述第一线程的解锁请求时,确定所述共享缓存中是否存在所述第一数据;
若不存在,则更改所述第一线程的所述第一数据,使所述第一线程解锁;
若存在,则更改共享缓存中的所述第一数据,使所述第一线程解锁。
31.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令被处理器执行时实现如下的步骤:
接收到待获锁线程的获锁请求时,通过处理器的共享缓存进行锁数据和待获锁线程的线程数据的交互,根据所述锁数据确定锁是否被占用;
若否,则使所述待获锁线程获得锁;
若是,则当占锁线程的目标线程数据满足预设条件时,使所述待获锁线程获得锁;
和/或,
接收到占锁线程的解锁请求时,确定所述占锁线程占锁前通过处理器的共享缓存与锁进行数据交互时,写入到所述共享缓存中的线程数据是否被更改;
若被更改,则更改所述占锁线程的线程数据,使所述占锁线程解锁。
32.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令被处理器执行时实现如下的步骤:
接收到第一线程的获锁请求时,根据锁的与所述第一线程的第一数据对应的数据确定锁是否被占用,并将所述第一数据写入处理器的共享缓存中所述锁的缓存行;
若否,则使所述第一线程获取锁;
若是,则当占锁线程的目标线程数据满足预设条件时,使所述第一线程获取锁;
接收到所述第一线程的解锁请求时,确定所述共享缓存中是否存在所述第一数据;
若不存在,则更改所述第一线程的所述第一数据,使所述第一线程解锁;
若存在,则更改共享缓存中的所述第一数据,使所述第一线程解锁。
CN201911043428.3A 2019-10-30 2019-10-30 一种数据处理方法、装置、设备及介质 Active CN110781016B (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN202110377343.XA CN112905365B (zh) 2019-10-30 2019-10-30 一种数据处理方法、装置、设备及介质
CN201911043428.3A CN110781016B (zh) 2019-10-30 2019-10-30 一种数据处理方法、装置、设备及介质
PCT/CN2020/110753 WO2021082665A1 (zh) 2019-10-30 2020-08-24 一种数据处理方法、装置、设备及介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911043428.3A CN110781016B (zh) 2019-10-30 2019-10-30 一种数据处理方法、装置、设备及介质

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CN202110377343.XA Division CN112905365B (zh) 2019-10-30 2019-10-30 一种数据处理方法、装置、设备及介质

Publications (2)

Publication Number Publication Date
CN110781016A true CN110781016A (zh) 2020-02-11
CN110781016B CN110781016B (zh) 2021-04-23

Family

ID=69387643

Family Applications (2)

Application Number Title Priority Date Filing Date
CN201911043428.3A Active CN110781016B (zh) 2019-10-30 2019-10-30 一种数据处理方法、装置、设备及介质
CN202110377343.XA Active CN112905365B (zh) 2019-10-30 2019-10-30 一种数据处理方法、装置、设备及介质

Family Applications After (1)

Application Number Title Priority Date Filing Date
CN202110377343.XA Active CN112905365B (zh) 2019-10-30 2019-10-30 一种数据处理方法、装置、设备及介质

Country Status (2)

Country Link
CN (2) CN110781016B (zh)
WO (1) WO2021082665A1 (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111385294A (zh) * 2020-03-04 2020-07-07 腾讯科技(深圳)有限公司 数据处理方法、系统、计算机设备和存储介质
CN112346879A (zh) * 2020-11-06 2021-02-09 网易(杭州)网络有限公司 进程管理方法、装置、计算机设备及存储介质
WO2021082665A1 (zh) * 2019-10-30 2021-05-06 支付宝(杭州)信息技术有限公司 一种数据处理方法、装置、设备及介质
CN116860436A (zh) * 2023-06-15 2023-10-10 重庆智铸达讯通信有限公司 线程数据处理方法、装置、设备及存储介质

Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101403979A (zh) * 2008-10-27 2009-04-08 成都市华为赛门铁克科技有限公司 一种自旋锁的加锁方法及计算机系统
CN102754069A (zh) * 2010-02-18 2012-10-24 国际商业机器公司 加载/存储分离设施及其指令
US8375176B2 (en) * 2008-03-24 2013-02-12 Nvidia Corporation Lock mechanism to enable atomic updates to shared memory
US8458721B2 (en) * 2011-06-02 2013-06-04 Oracle International Corporation System and method for implementing hierarchical queue-based locks using flat combining
CN103761182A (zh) * 2013-12-26 2014-04-30 上海华为技术有限公司 一种死锁检测方法及装置
US20140189260A1 (en) * 2012-12-27 2014-07-03 Nvidia Corporation Approach for context switching of lock-bit protected memory
CN104063331A (zh) * 2014-07-03 2014-09-24 龙芯中科技术有限公司 处理器、共享存储区域访问方法和锁管理器
US20150205646A1 (en) * 2014-01-20 2015-07-23 Netapp, Inc. Context aware synchronization
US10007785B2 (en) * 2013-12-30 2018-06-26 Huawei Technologies Co., Ltd. Method and apparatus for implementing virtual machine introspection
CN108319496A (zh) * 2017-01-18 2018-07-24 阿里巴巴集团控股有限公司 资源访问方法、业务服务器、分布式系统及存储介质
CN108932172A (zh) * 2018-06-27 2018-12-04 西安交通大学 一种基于OpenMP/MPI混合并行CFD计算的细粒度共享内存通信同步方法
CN109271260A (zh) * 2018-08-28 2019-01-25 百度在线网络技术(北京)有限公司 临界区加锁方法、装置、终端及存储介质

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8607239B2 (en) * 2009-12-31 2013-12-10 International Business Machines Corporation Lock mechanism to reduce waiting of threads to access a shared resource by selectively granting access to a thread before an enqueued highest priority thread
WO2015055083A1 (en) * 2013-10-14 2015-04-23 International Business Machines Corporation Adaptive process for data sharing with selection of lock elision and locking
US9535704B2 (en) * 2014-02-03 2017-01-03 University Of Rochester System and method to quantify digital data sharing in a multi-threaded execution
CN104267929A (zh) * 2014-09-30 2015-01-07 香港应用科技研究院有限公司 计算系统以及在该计算系统中操作锁的方法
US10846148B2 (en) * 2015-09-10 2020-11-24 Hewlett Packard Enterprise Development Lp Request of an MCS lock by guests
CN109614220B (zh) * 2018-10-26 2020-06-30 阿里巴巴集团控股有限公司 一种多核系统处理器和数据更新方法
CN110096475B (zh) * 2019-04-26 2023-10-24 西安理工大学 一种基于混合互连架构的众核处理器
CN110781016B (zh) * 2019-10-30 2021-04-23 支付宝(杭州)信息技术有限公司 一种数据处理方法、装置、设备及介质

Patent Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8375176B2 (en) * 2008-03-24 2013-02-12 Nvidia Corporation Lock mechanism to enable atomic updates to shared memory
CN101403979A (zh) * 2008-10-27 2009-04-08 成都市华为赛门铁克科技有限公司 一种自旋锁的加锁方法及计算机系统
CN102754069A (zh) * 2010-02-18 2012-10-24 国际商业机器公司 加载/存储分离设施及其指令
US8458721B2 (en) * 2011-06-02 2013-06-04 Oracle International Corporation System and method for implementing hierarchical queue-based locks using flat combining
US20140189260A1 (en) * 2012-12-27 2014-07-03 Nvidia Corporation Approach for context switching of lock-bit protected memory
CN103761182A (zh) * 2013-12-26 2014-04-30 上海华为技术有限公司 一种死锁检测方法及装置
US10007785B2 (en) * 2013-12-30 2018-06-26 Huawei Technologies Co., Ltd. Method and apparatus for implementing virtual machine introspection
US20150205646A1 (en) * 2014-01-20 2015-07-23 Netapp, Inc. Context aware synchronization
CN104063331A (zh) * 2014-07-03 2014-09-24 龙芯中科技术有限公司 处理器、共享存储区域访问方法和锁管理器
CN108319496A (zh) * 2017-01-18 2018-07-24 阿里巴巴集团控股有限公司 资源访问方法、业务服务器、分布式系统及存储介质
CN108932172A (zh) * 2018-06-27 2018-12-04 西安交通大学 一种基于OpenMP/MPI混合并行CFD计算的细粒度共享内存通信同步方法
CN109271260A (zh) * 2018-08-28 2019-01-25 百度在线网络技术(北京)有限公司 临界区加锁方法、装置、终端及存储介质

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021082665A1 (zh) * 2019-10-30 2021-05-06 支付宝(杭州)信息技术有限公司 一种数据处理方法、装置、设备及介质
CN111385294A (zh) * 2020-03-04 2020-07-07 腾讯科技(深圳)有限公司 数据处理方法、系统、计算机设备和存储介质
CN111385294B (zh) * 2020-03-04 2021-04-20 腾讯科技(深圳)有限公司 数据处理方法、系统、计算机设备和存储介质
CN112346879A (zh) * 2020-11-06 2021-02-09 网易(杭州)网络有限公司 进程管理方法、装置、计算机设备及存储介质
CN112346879B (zh) * 2020-11-06 2023-08-11 网易(杭州)网络有限公司 进程管理方法、装置、计算机设备及存储介质
CN116860436A (zh) * 2023-06-15 2023-10-10 重庆智铸达讯通信有限公司 线程数据处理方法、装置、设备及存储介质

Also Published As

Publication number Publication date
CN112905365A (zh) 2021-06-04
CN110781016B (zh) 2021-04-23
CN112905365B (zh) 2024-02-13
WO2021082665A1 (zh) 2021-05-06

Similar Documents

Publication Publication Date Title
CN110781016B (zh) 一种数据处理方法、装置、设备及介质
US11106795B2 (en) Method and apparatus for updating shared data in a multi-core processor environment
JP2020510894A (ja) ブロックチェーンコンセンサス方法およびデバイス
CN108628688B (zh) 一种消息处理方法、装置及设备
US10540284B2 (en) Cache-coherent multiprocessor system and a method for detecting failures in a cache-coherent multiprocessor system
CN110737608B (zh) 一种数据操作方法、装置及系统
CN109947643B (zh) 一种基于a/b测试的实验方案的配置方法、装置及设备
US20110153690A1 (en) Hardware off-load memory garbage collection acceleration
US9910418B2 (en) Method and programming system for programming an automation component
CN116107728B (zh) 一种任务执行方法、装置、存储介质及电子设备
CN109408226A (zh) 数据处理方法、装置及终端设备
US20110153691A1 (en) Hardware off-load garbage collection acceleration for languages with finalizers
CN113641872B (zh) 一种散列方法、装置、设备及介质
US9594792B2 (en) Multiple processor system
CN116880905B (zh) 一种数据存储方法、装置、存储介质及电子设备
CN107645541B (zh) 数据存储方法、装置及服务器
JP5948416B2 (ja) 情報処理装置、情報保存処理プログラム及び情報保存処理方法
US8051223B1 (en) System and method for managing memory using multi-state buffer representations
US20130110882A1 (en) System and method for persisting object pointers
CN113641871B (zh) 一种无锁散列方法、装置、设备及介质
CN116204124B (zh) 一种基于冲突锁的数据处理方法、系统及电子设备
CN115098271B (zh) 一种多线程数据处理方法、装置、设备及介质
CN107025144B (zh) 用于写入以及读取数据集的方法
KR102201669B1 (ko) 멱등(idempotent) 커널 생성 방법 및 장치
US9251100B2 (en) Bitmap locking using a nodal lock

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