CN105824709A - 一种临界区访问方法及装置 - Google Patents
一种临界区访问方法及装置 Download PDFInfo
- Publication number
- CN105824709A CN105824709A CN201610140580.3A CN201610140580A CN105824709A CN 105824709 A CN105824709 A CN 105824709A CN 201610140580 A CN201610140580 A CN 201610140580A CN 105824709 A CN105824709 A CN 105824709A
- Authority
- CN
- China
- Prior art keywords
- cpuid
- mutual exclusion
- exclusion lock
- lock
- cpu
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/524—Deadlock detection or avoidance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mobile Radio Communication Systems (AREA)
Abstract
本发明公开了一种临界区访问方法及装置,在本方案中,在互斥锁的信息区内增加CPU ID信息,该CPU ID表示运行在该CPU ID对应的CPU上的任务锁定了互斥锁。任务访问临界区时,首先检测临界区的互斥锁是否处于锁定状态;若是,则读取互斥锁的信息区内存储的中央处理器CPU标识ID;若读取的CPU ID与自身所在CPU的CPU ID相同,则进入休眠状态。这样,可以使得同CPU内的任务直接进入休眠状态,不必进行轮询,从而由于减少了轮询的次数,从而达到节约处理资源的目的。
Description
技术领域
本发明涉及临界区访问技术领域,尤其涉及一种临界区访问方法及装置。
背景技术
临界区无法同时被多个任务(一个任务指一个线程或进程)访问。当有任务访问临界区时,其他任务必须等待,以确保临界区同一时间仅被一个任务访问,任务之间对临界区的访问互斥的。
现有技术同通过为临界区设置互斥锁的方法,实现临界区同一时间仅被一个任务访问。具体的,针对任何任务A,当该任务A访问临界区时,必须首先锁定互斥锁(即获得临界区的访问权限);若另一个任务B也需要访问临界区,而互斥锁又被其它任务锁定时,该任务B由于不知道任务A什么时候能够释放互斥锁,则需要不停的轮询以便于获知互斥锁是否被释放,然后通过锁定被任务A释放的互斥锁来获得访问临界区的权限。任务B若轮询的次数到达一定次数,则将会进入休眠状态。
现有技术中由于当互斥锁被其他任务锁定时,需要不断的轮询竞争获取互斥锁,造成处理资源的浪费。
发明内容
本发明实施例提供了一种临界区访问方法及装置,用以解决目前存在的由于不断的轮询互斥锁,造成处理资源浪费的问题。
本发明实施例提供了一种临界区访问方法,包括:
访问临界区时,检测临界区的互斥锁是否处于锁定状态;
若是,则读取互斥锁的信息区内存储的CPU(CentralProcessingUnit,中央处理器)ID(Identity,标识);该CPUID表示运行在该CPUID对应的CPU上的任务锁定了互斥锁;
若读取的CPUID与自身所在CPU的CPUID相同,则进入休眠状态。
进一步地,所述方法还包括:
若检测到临界区的互斥锁是处于未锁定状态,则锁定互斥锁;并,
将互斥锁的信息区内的CPUID更改为自身所在CPU的CPUID;并,
对临界区进行访问。
进一步地,所述对临界区进行访问之后,所述方法还包括:
释放互斥锁之前,将互斥锁的信息区内的CPUID更改为预设无效值,该预设无效值用于表示互斥锁未被任何CPU上的任务锁定;
所述若读取的CPUID与自身所在CPU的CPUID相同,则进入休眠状态之前,所述方法还包括:
确定读取的CPUID不是预设无效值。
进一步地,所述方法还包括:
若读取的CPUID为预设无效值,则继续读取互斥锁的信息区内存储的CPUID;
若连续第一预设次数读取的CPUID均为预设无效值,则进入休眠状态。
进一步地,所述方法还包括:
若读取的CPUID与自身的CPUID不相同,将记录的轮询次数加一;
判断轮询次数是否大于或等于第二预设次数;
若轮询次数大于或等于第二预设次数,则进入休眠状态;
若轮询次数小于第二预设次数,则返回执行检测临界区的互斥锁是否处于被锁定状态的步骤。
本发明还提供一种临界区访问装置,包括:
锁定状态检测模块,用于访问临界区时,检测临界区的互斥锁是否处于锁定状态;
CPUID读取模块,用于若互斥锁处于锁定状态,则读取互斥锁的信息区内存储的CPUID;该CPUID表示运行在该CPUID对应的CPU上的任务锁定了互斥锁;
第一休眠模块,用于若读取的CPUID与自身所在CPU的CPUID相同,则进入休眠状态。
进一步地,所述装置还包括:
锁定模块,用于若检测到临界区的互斥锁是处于未锁定状态,则锁定互斥锁;
第一CPUID修改模块,用于将互斥锁的信息区内的CPUID更改为自身所在CPU的CPUID;
访问模块,用于对临界区进行访问。
进一步地,所述装置还包括:
第二CPUID修改模块,用于所述访问模块对临界区进行访问之后,释放互斥锁之前,将互斥锁的信息区内的CPUID更改为预设无效值,该预设无效值用于表示互斥锁未被任何CPU上的任务锁定;
预设无效值确定模块,用于所述第一休眠模块若读取的CPUID与自身所在CPU的CPUID相同,则进入休眠状态之前,确定读取的CPUID不是预设无效值。
进一步地,所述装置还包括:
继续读取模块,用于若读取的CPUID为预设无效值,则继续读取互斥锁的信息区内存储的CPUID;
第二休眠模块,用于若连续第一预设次数读取的CPUID均为预设无效值,则进入休眠状态。
进一步地,所述装置还包括:
记录模块,用于若读取的CPUID与自身的CPUID不相同,将记录的轮询次数加一;
判断模块,用于判断轮询次数是否大于或等于第二预设次数;
第三休眠模块,用于若轮询次数大于或等于第二预设次数,则进入休眠状态;
返回模块,用于若轮询次数小于第二预设次数,则触发锁定状态检测模块检测临界区的互斥锁是否处于被锁定状态。
本发明有益效果如下:在本发明实施例所述技术方案中,在互斥锁的信息区内增加CPUID信息,该CPUID表示运行在该CPUID对应的CPU上的任务锁定了互斥锁。任务访问临界区时,首先检测临界区的互斥锁是否处于锁定状态;若是,则读取互斥锁的信息区内存储的中央处理器CPU标识ID;若读取的CPUID与自身所在CPU的CPUID相同,则进入休眠状态。这样,可以使得同CPU内的任务直接进入休眠状态,不必进行轮询,从而由于减少了轮询的次数,从而达到节约处理资源的目的。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1所示为本发明实施例一中所述临界区访问方法的流程示意图;
图2所示为本发明实施例二中所述临界区访问方法的流程示意图;
图3所示为本发明实施例三中所述临界区访问装置的结构示意图。
具体实施方式
发明人在研究中发现,同一CPU在同一时间仅有一个任务(即一个线程或进程)可以请求获取互斥锁。故此,对于同一CPU内,若已经有一个任务锁定互斥锁,则该CPU内的其他任务轮询尝试获取互斥锁是没有意义的(因为该CPU内已经有任务锁定了互斥锁)。故此,本发明实施例提供了一种临界区访问方法及装置,在本发明实施例所述技术方案中,在互斥锁的信息区内增加CPUID信息,该CPUID表示运行在该CPUID对应的CPU上的任务锁定了互斥锁。任务访问临界区时,首先检测临界区的互斥锁是否处于锁定状态;若是,则读取互斥锁的信息区内存储的中央处理器CPU标识ID;若读取的CPUID与自身所在CPU的CPUID相同,则进入休眠状态。这样,可以使得同CPU内的任务直接进入休眠状态,不必进行轮询,从而由于减少了轮询的次数,从而达到节约处理资源的目的。
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
实施例一:
如图1所示,其为本发明实施例一中临界区访问方法的流程示意图,该临界区访问方法可包括以下步骤:
步骤101:访问临界区时,检测临界区的互斥锁是否处于锁定状态。
其中,在一个实施例中,本发明实施例的执行主体可以为任一任务(即任一进程或线程)。
其中,在一个实施例中,互斥锁可以具有锁定状态参数,故此,可以通过以下方法检测临界区的互斥锁是否处于锁定状态,包括:
步骤A1:读取互斥锁的锁定状态参数值。
例如,可以使用1表示互斥锁处于锁定状态,用0表示互斥锁处于未锁定状态。
步骤A2:若读取的锁定状态参数值为表示处于锁定状态的参数值,则确定互斥锁处于锁定状态;若读取的锁定状态参数值为表示处于未锁定状态的参数值,则确定互斥锁处于未锁定状态。
需要说明的是,可以通过现有技术中的其他方法检测临界区的互斥锁是否处于锁定状态,本发明实施例对此不一一列举。
步骤102:若是,则读取互斥锁的信息区内存储的CPUID;该CPUID表示运行在该CPUID对应的CPU上的任务锁定了互斥锁。
其中,信息区内存储的CPUID,是由锁定了互斥锁的任务写入互斥锁的信息区的。
步骤103:若读取的CPUID与自身所在CPU的CPUID相同,则进入休眠状态。
这样,本发明实施例中,当前请求互斥锁的任务若当确定读取的CPUID与自身所在CPU的CPUID相同(即同一CPU已经有其它任务锁定互斥锁时),则进入休眠状态,不再进行轮询,这样,便能够解决由于轮询而造成的处理资源的浪费。
为便于进一步理解,下面对本发明实施例进行进一步详细的说明,包括以下内容。
其中,在一个实施例中,为便于能够尽快的访问临界区,本发明实施例中还包括以下步骤:
步骤A1:若检测到临界区的互斥锁是处于未锁定状态,则锁定互斥锁。
步骤A2:将互斥锁的信息区内的CPUID更改为自身所在CPU的CPUID。
步骤A3:对临界区进行访问。
这样,本发明实施例中,锁定互斥锁后,通过将互斥锁的信息区内的CPUID更改为自身所在CPU的CPUID,以便于其它任务能够根据互斥锁的信息区内的CPUID决定继续轮询还是进入休眠状态。
其中,在一个实施例中,在执行步骤A1和步骤A2之间可能会有一些时间间隔(即步骤A1执行完后,会再过一段时间步骤A2才执行完)。而在这个时间间隔内,可能还有其他任务在进行轮询以期获得访问临界区的权限。而若在这个时间间隔内,互斥锁的信息区存储的CPUID若还未来得及修改(即步骤A1已执行完毕,而步骤A2尚未执行完),那么互斥锁的信息区存储的CPUID可能与实际情况不符,这会造成其他任务由于获取了错误的CPUID而造成误判。例如,任务A运行在CPU_0上,任务B运行在CPU_0上,任务C运行在在CPU_1上(CPU_0与CPU_1表示不同的CPU)。若通过竞争,任务A首先锁定互斥锁,并将信息区的CPUID写为CPU_0。任务A释放互斥锁之后,任务C锁定互斥锁,若任务C还未将信息区的CPUID改写为CPU_1时,任务B进行轮询并读取信息区的CPUID,则读取的结果会是CPU_0(而实际上信息区的CPUID应该为CPU_1),这便导致任务B读取的CPUID与实际不符,容易使得任务B造成误判而进入休眠状态。
本发明实施例中,为了避免读取的CPUID与实际不符而导致误判,可以在执行步骤A3(即对临界区进行访问)之后,在释放互斥锁之前,将互斥锁的信息区内的CPUID更改为预设无效值,该预设无效值用于表示互斥锁未被任何CPU上的任务锁定;然后再释放互斥锁。这样,在执行步骤103之前,本发明实时例中还可以确定读取的CPUID不是预设无效值。这样,通过预设无效值,可以使得为锁定互斥锁的其他任务,在轮询时,可以得知互斥锁处于锁定状态,但是具体哪个CPUID并不清楚,可以继续轮询等待,以决定自身是否进入休眠状态。
其中,在一个实施例中,步骤A2与步骤A3之间的时间间隔越长,则可能是由于出现了故障,这时候,往往故障恢复需要一定的时间。而在故障期间任务轮询互斥锁是一种处理资源的浪费,故此,本发明实施例中,为了进一步节约处理资源,在执行步骤102之后,若读取的CPUID为预设无效值,则继续读取互斥锁的信息区内存储的CPUID;并,若连续第一预设次数读取的CPUID均为预设无效值,则进入休眠状态。这样,本发明实施例中若连续第一预设次数读取的CPUID均为预设无效值则视为出现了需要长时间处理修复的故障,而在次数进入休眠状态,以避免故障期间轮询造成的处理资源浪费。
其中,在一个实施例中,为了便于尽快的锁定互斥锁,在执行步骤102之后,还可以包括以下步骤:
步骤B1:若读取的CPUID与自身的CPUID不相同,将记录的轮询次数加一。
步骤B2:判断轮询次数是否大于或等于第二预设次数。
步骤B3:若轮询次数大于或等于第二预设次数,则进入休眠状态;若轮询次数小于第二预设次数,则返回执行检测临界区的互斥锁是否处于被锁定状态的步骤。
其中,在一个实施例中进入休眠状态的任务,在进入休眠状态之前,可以将自身的任务ID记录在预存的休眠任务记录里,以便于等待接收到操作***发送的唤醒指令后,结束休眠并执行步骤101。具体实施时,可以由锁定互斥锁的任务在释放互斥锁之后,查看休眠任务记录里是否有处于休眠状态的任务,若有,则通知操作***唤醒处于休眠状态的任务。
其中,在一个实施例中休眠任务记录可以以文件形式存储,也可以以数据库形式存储,本发明实施例对此不做限定。
其中,在一个实施例中休眠任务记录中还可以包括各处于休眠状态的任务的优先级,则操作***可以根据优先级确定唤醒哪些处于休眠状态的任务。例如唤醒优先级最高的任务,以使优先级低的任务继续处于休眠状态,而减少优先级低的任务继续轮询的次数。
需要说明的是,唤醒哪些任务可以根据其他现有技术的算法确定,本发明实施例对此不做限定。
实施例二
为便于理解,举例说明如何访问临界区,假设开始时,可以由操作***对互斥锁进行初始化(即将互斥锁设置为处于未锁定状态,并将互斥锁的信息区的CPUID设置为预设无效值)。若通过竞争,任务A首先锁定了互斥锁,并将互斥锁信息区的CPUID设置为任务A所在CPU的CPUID,则如图2所示,任务B可以执行以下步骤:
步骤201:访问临界区时,检测临界区的互斥锁是否处于锁定状态,若是,则执行步骤202,若否,则执行步骤209。
步骤202:读取互斥锁的信息区内存储的CPUID。
步骤203:判断读取的CPUID是否为预设无效值;若是,则执行步骤204;若否,则执行步骤206。
步骤204:继续读取互斥锁的信息区内存储的CPUID;若连续第一预设次数读取的CPUID均为预设无效值,则进入休眠状态。
步骤205:判断读取的CPUID是否与自身所在CPU的CPUID相同;若是,则执行步骤206;若否,则执行步骤207。
步骤206:进入休眠状态。
步骤207:将记录的轮询次数加一。
步骤208:判断轮询次数是否大于或等于第二预设次数;若是,则执行步骤206;若否,则执行步骤201。
步骤209:锁定互斥锁。
步骤210:将互斥锁的信息区内的CPUID更改为自身所在CPU的CPUID;并对临界区进行访问。
步骤211:释放互斥锁之前,将互斥锁的信息区内的CPUID更改为预设无效值。
步骤212:释放互斥锁。
其中,在一个实施例中,本发明实施例中还可以在释放互斥锁之后,由任务B查看休眠任务记录里是否有处于休眠状态的任务,若有,则通知操作***唤醒处于休眠状态的任务。具体的方法,已在实施例一种说明,在此不再赘述。
实施例三
基于相同的发明构思,本发明实施例还提供一种临界区访问装置,如图3所示,为该装置的结构示意图,包括:
锁定状态检测模块301,用于访问临界区时,检测临界区的互斥锁是否处于锁定状态;
CPUID读取模块302,用于若互斥锁处于锁定状态,则读取互斥锁的信息区内存储的中央处理器CPU标识ID;该CPUID表示运行在该CPUID对应的CPU上的任务锁定了互斥锁;
第一休眠模块303,用于若读取的CPUID与自身所在CPU的CPUID相同,则进入休眠状态。
其中,在一个实施例中,临界区访问装置还包括:
锁定模块,用于若检测到临界区的互斥锁是处于未锁定状态,则锁定互斥锁;
第一CPUID修改模块,用于将互斥锁的信息区内的CPUID更改为自身所在CPU的CPUID;
访问模块,用于对临界区进行访问。
其中,在一个实施例中,临界区访问装置还包括:
第二CPUID修改模块,用于访问模块对临界区进行访问之后,释放互斥锁之前,将互斥锁的信息区内的CPUID更改为预设无效值,该预设无效值用于表示互斥锁未被任何CPU上的任务锁定;
预设无效值确定模块,用于第一休眠模块若读取的CPUID与自身所在CPU的CPUID相同,则进入休眠状态之前,确定读取的CPUID不是预设无效值。
其中,在一个实施例中,临界区访问装置还包括:
继续读取模块,用于若读取的CPUID为预设无效值,则继续读取互斥锁的信息区内存储的CPUID;
第二休眠模块,用于若连续第一预设次数读取的CPUID均为预设无效值,则进入休眠状态。
其中,在一个实施例中,临界区访问装置还包括:
记录模块,用于若读取的CPUID与自身的CPUID不相同,将记录的轮询次数加一;
判断模块,用于判断轮询次数是否大于或等于第二预设次数;
第三休眠模块,用于若轮询次数大于或等于第二预设次数,则进入休眠状态;
返回模块,用于若轮询次数小于第二预设次数,则触发锁定状态检测模块检测临界区的互斥锁是否处于被锁定状态。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
本领域内的技术人员应明白,本发明的实施例可提供为方法、装置、***、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、装置(装置)和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理装置的处理器以产生一个机器,使得通过计算机或其他可编程数据处理装置的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理装置以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理装置上,使得在计算机或其他可编程装置上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程装置上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (10)
1.一种临界区访问方法,其特征在于,包括:
访问临界区时,检测临界区的互斥锁是否处于锁定状态;
若是,则读取互斥锁的信息区内存储的中央处理器CPU标识ID;该CPUID表示运行在该CPUID对应的CPU上的任务锁定了互斥锁;
若读取的CPUID与自身所在CPU的CPUID相同,则进入休眠状态。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若检测到临界区的互斥锁是处于未锁定状态,则锁定互斥锁;并,
将互斥锁的信息区内的CPUID更改为自身所在CPU的CPUID;并,
对临界区进行访问。
3.根据权利要求2所述的方法,其特征在于,所述对临界区进行访问之后,所述方法还包括:
释放互斥锁之前,将互斥锁的信息区内的CPUID更改为预设无效值,该预设无效值用于表示互斥锁未被任何CPU上的任务锁定;
所述若读取的CPUID与自身所在CPU的CPUID相同,则进入休眠状态之前,所述方法还包括:
确定读取的CPUID不是预设无效值。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
若读取的CPUID为预设无效值,则继续读取互斥锁的信息区内存储的CPUID;
若连续第一预设次数读取的CPUID均为预设无效值,则进入休眠状态。
5.根据权利要求1-4中任一所述的方法,其特征在于,所述方法还包括:
若读取的CPUID与自身的CPUID不相同,将记录的轮询次数加一;
判断轮询次数是否大于或等于第二预设次数;
若轮询次数大于或等于第二预设次数,则进入休眠状态;
若轮询次数小于第二预设次数,则返回执行检测临界区的互斥锁是否处于被锁定状态的步骤。
6.一种临界区访问装置,其特征在于,包括:
锁定状态检测模块,用于访问临界区时,检测临界区的互斥锁是否处于锁定状态;
CPUID读取模块,用于若互斥锁处于锁定状态,则读取互斥锁的信息区内存储的中央处理器CPU标识ID;该CPUID表示运行在该CPUID对应的CPU上的任务锁定了互斥锁;
第一休眠模块,用于若读取的CPUID与自身所在CPU的CPUID相同,则进入休眠状态。
7.根据权利要求6所述的装置,其特征在于,所述装置还包括:
锁定模块,用于若检测到临界区的互斥锁是处于未锁定状态,则锁定互斥锁;
第一CPUID修改模块,用于将互斥锁的信息区内的CPUID更改为自身所在CPU的CPUID;
访问模块,用于对临界区进行访问。
8.根据权利要求7所述的装置,其特征在于,所述装置还包括:
第二CPUID修改模块,用于所述访问模块对临界区进行访问之后,释放互斥锁之前,将互斥锁的信息区内的CPUID更改为预设无效值,该预设无效值用于表示互斥锁未被任何CPU上的任务锁定;
预设无效值确定模块,用于所述第一休眠模块若读取的CPUID与自身所在CPU的CPUID相同,则进入休眠状态之前,确定读取的CPUID不是预设无效值。
9.根据权利要求8所述的装置,其特征在于,所述装置还包括:
继续读取模块,用于若读取的CPUID为预设无效值,则继续读取互斥锁的信息区内存储的CPUID;
第二休眠模块,用于若连续第一预设次数读取的CPUID均为预设无效值,则进入休眠状态。
10.根据权利要求6-9中任一所述的装置,其特征在于,所述装置还包括:
记录模块,用于若读取的CPUID与自身的CPUID不相同,将记录的轮询次数加一;
判断模块,用于判断轮询次数是否大于或等于第二预设次数;
第三休眠模块,用于若轮询次数大于或等于第二预设次数,则进入休眠状态;
返回模块,用于若轮询次数小于第二预设次数,则触发锁定状态检测模块检测临界区的互斥锁是否处于被锁定状态。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610140580.3A CN105824709B (zh) | 2016-03-11 | 2016-03-11 | 一种临界区访问方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610140580.3A CN105824709B (zh) | 2016-03-11 | 2016-03-11 | 一种临界区访问方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105824709A true CN105824709A (zh) | 2016-08-03 |
CN105824709B CN105824709B (zh) | 2019-09-17 |
Family
ID=56988003
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610140580.3A Active CN105824709B (zh) | 2016-03-11 | 2016-03-11 | 一种临界区访问方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105824709B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106569897A (zh) * | 2016-11-07 | 2017-04-19 | 许继集团有限公司 | 基于协作式多任务调度机制的共享总线的轮询方法与装置 |
CN106776050A (zh) * | 2016-10-17 | 2017-05-31 | 广州视源电子科技股份有限公司 | 多用户进程互斥方法及装置 |
CN109947575A (zh) * | 2019-03-21 | 2019-06-28 | 恒生电子股份有限公司 | 读写锁的加锁、释放方法及相关*** |
CN111414337A (zh) * | 2019-01-08 | 2020-07-14 | 阿里巴巴集团控股有限公司 | 一种文件读取方法、装置、计算设备及存储介质 |
CN111913810A (zh) * | 2020-07-28 | 2020-11-10 | 北京百度网讯科技有限公司 | 多线程场景下的任务执行方法、装置、设备和存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050273782A1 (en) * | 2004-06-03 | 2005-12-08 | Intel Corporation | Thread synchronization methods and apparatus for managed run-time environments |
CN1920780A (zh) * | 2006-08-15 | 2007-02-28 | 杭州华为三康技术有限公司 | 访问临界区的方法和*** |
CN1924816A (zh) * | 2006-09-26 | 2007-03-07 | 杭州华为三康技术有限公司 | 提高多核***访问临界资源速度的方法和装置 |
CN101051281A (zh) * | 2007-05-16 | 2007-10-10 | 杭州华三通信技术有限公司 | 多cpu对临界资源进行互斥访问的方法和装置 |
WO2014183510A1 (en) * | 2013-05-17 | 2014-11-20 | Hangzhou H3C Technologies Co., Ltd. | Spinlock resources processing |
-
2016
- 2016-03-11 CN CN201610140580.3A patent/CN105824709B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050273782A1 (en) * | 2004-06-03 | 2005-12-08 | Intel Corporation | Thread synchronization methods and apparatus for managed run-time environments |
CN1920780A (zh) * | 2006-08-15 | 2007-02-28 | 杭州华为三康技术有限公司 | 访问临界区的方法和*** |
CN1924816A (zh) * | 2006-09-26 | 2007-03-07 | 杭州华为三康技术有限公司 | 提高多核***访问临界资源速度的方法和装置 |
CN101051281A (zh) * | 2007-05-16 | 2007-10-10 | 杭州华三通信技术有限公司 | 多cpu对临界资源进行互斥访问的方法和装置 |
WO2014183510A1 (en) * | 2013-05-17 | 2014-11-20 | Hangzhou H3C Technologies Co., Ltd. | Spinlock resources processing |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106776050A (zh) * | 2016-10-17 | 2017-05-31 | 广州视源电子科技股份有限公司 | 多用户进程互斥方法及装置 |
CN106776050B (zh) * | 2016-10-17 | 2019-12-17 | 广州视源电子科技股份有限公司 | 多用户进程互斥方法及装置 |
CN106569897A (zh) * | 2016-11-07 | 2017-04-19 | 许继集团有限公司 | 基于协作式多任务调度机制的共享总线的轮询方法与装置 |
CN106569897B (zh) * | 2016-11-07 | 2019-11-12 | 许继集团有限公司 | 基于协作式多任务调度机制的共享总线的轮询方法与装置 |
CN111414337A (zh) * | 2019-01-08 | 2020-07-14 | 阿里巴巴集团控股有限公司 | 一种文件读取方法、装置、计算设备及存储介质 |
CN111414337B (zh) * | 2019-01-08 | 2023-05-26 | 阿里巴巴集团控股有限公司 | 一种文件读取方法、装置、计算设备及存储介质 |
CN109947575A (zh) * | 2019-03-21 | 2019-06-28 | 恒生电子股份有限公司 | 读写锁的加锁、释放方法及相关*** |
CN111913810A (zh) * | 2020-07-28 | 2020-11-10 | 北京百度网讯科技有限公司 | 多线程场景下的任务执行方法、装置、设备和存储介质 |
CN111913810B (zh) * | 2020-07-28 | 2024-03-19 | 阿波罗智能技术(北京)有限公司 | 多线程场景下的任务执行方法、装置、设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN105824709B (zh) | 2019-09-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105824709A (zh) | 一种临界区访问方法及装置 | |
US8176489B2 (en) | Use of rollback RCU with read-side modifications to RCU-protected data structures | |
CN101937365B (zh) | 并行程序的死锁检测方法和*** | |
US9235444B2 (en) | Dynamically adjusting global heap allocation in multi-thread environment | |
CN111488290B (zh) | 基于智能电表操作***的线程测试方法和装置 | |
US5301311A (en) | Control method for preventing incorrect reset of common resource and multicomputer system executing the method | |
CN103488563A (zh) | 并行程序的数据竞争检测方法、装置及多核处理*** | |
JP2016517102A (ja) | データベースにおいて再実行データを処理するための方法および装置 | |
WO2019006997A1 (zh) | 程序死锁检测方法、存储介质、设备及*** | |
CN112363846B (zh) | 数据库事务的死锁检测方法、装置及电子设备 | |
US7975176B2 (en) | Application failure recovery | |
CN112130923A (zh) | 容器的管理方法、装置、电子设备及计算机可读存储介质 | |
CN111813518A (zh) | 机器人预警方法、装置、计算机设备及存储介质 | |
US7337274B2 (en) | Computer and control method | |
CN113076213A (zh) | 一种优化***管理中断处理硬件错误时间的方法及*** | |
CN110908968B (zh) | 一种文件锁解锁时避免惊群的方法、装置、设备及存储介质 | |
KR20200077297A (ko) | 멀티 프로세스/멀티 스레드에서 사용하는 공유 메모리에 대한 원자성 위반 결함 탐지 방법 및 장치 | |
CN109376027A (zh) | 一种异常销毁进程的处理方法及终端 | |
CN110059454B (zh) | Cpu程序的安全加固方法、装置 | |
CN111767155A (zh) | 死锁检测方法、装置、设备及计算机可读存储介质 | |
CN114253825A (zh) | 内存泄漏检测方法、装置、计算机设备和存储介质 | |
US20090158267A1 (en) | System and method for inserting authorized code into a program | |
US7788529B2 (en) | Method for safely interrupting blocked work in a server | |
CN116360932A (zh) | 扫描任务的管理方法及装置、电子设备、存储介质 | |
CN117950956A (zh) | 一种锁监控方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |