CN109558241A - 一种获取自旋锁的方法及装置 - Google Patents
一种获取自旋锁的方法及装置 Download PDFInfo
- Publication number
- CN109558241A CN109558241A CN201811347706.XA CN201811347706A CN109558241A CN 109558241 A CN109558241 A CN 109558241A CN 201811347706 A CN201811347706 A CN 201811347706A CN 109558241 A CN109558241 A CN 109558241A
- Authority
- CN
- China
- Prior art keywords
- serial number
- task
- queue
- tail
- critical zone
- 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.)
- Pending
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/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/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
-
- 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/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种获取自旋锁的方法及装置,其中,所述方法包括:通过CPU的原子操作函数对多个任务进行排队;确定用于表征所述多个任务访问临界区先后顺序的序号队列,以及所述序号队列的队头序号和队尾序号,其中,所述队头序号和所述队尾序号用于表征对应的任务获取所述临界区的自旋锁的排队信息;基于所述队头序号确定待访问所述临界区的第一任务对应的原子序号;若所述队尾序号等于所述原子序号,则控制所述第一任务获取所述临界区的自旋锁。用于解决现有自旋锁获取效率低的技术问题。
Description
技术领域
本发明涉及计算机技术领域,特别涉及一种获取自旋锁的方法及装置。
背景技术
随着CPU(Central Processing Unit,中央处理器)多核及并行技术的发展,在采用NC(Node Controller,节点控制器)的多节点大型NUMA(Non Uniform Memory AcessAchitecture,非统一内存访问)系统中,为了保证共享资源的一致性,通常使用自旋锁的机制进行多事务并发操作的控制。
具体来讲,自旋锁是为了实现保护共享资源而提出的一种锁机制。自旋锁与互斥锁比较类似,它们都是为了解决对某项资源的互斥使用。无论是互斥锁,还是自旋锁,在任何时刻,最多只能有一个保持者。也就是说,在任何时刻最多只能有一个执行单元获得锁。但是两者在调度机制上略有不同。对于互斥锁,如果资源已经被占用,资源申请者只能进入睡眠状态。但是自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁,“自旋”一词就因此而得名。
在具体实施过程中,自旋锁在内核中主要用来防止多处理器并发访问临界区,防止内核抢占造成的竞争。在任何时刻,自旋锁最多只能被一个任务持有,所以一个时刻在临界区中只允许有一个线程。在实际使用中,若任务B试图请求获取已经被任务A持有的自旋锁,则任务B将循环尝试获取该自旋锁。当持有该自旋锁的任务A释放该自旋锁之后,任务B方能获取该自旋锁。然而,随着任务数量的增加,多个任务持续试图获取该自旋锁。整个过程不仅将导致申请获取自旋锁的次数较多,而且由于任务抢锁具有一定的随机性,可能出现部分任务可能永远抢不到自旋锁的情况。
可见,现有技术存在自旋锁获取效率低的技术问题。
发明内容
本发明实施例提供一种获取自旋锁的方法及装置,用于解决现有自旋锁获取效率低的技术问题。
第一方面,本申请实施例提供了一种获取自旋锁的方法,包括:
通过CPU的原子操作函数对多个任务进行排队;
确定用于表征所述多个任务访问临界区先后顺序的序号队列,以及所述序号队列的队头序号和队尾序号,其中,所述队头序号和所述队尾序号用于表征对应的任务获取所述临界区的自旋锁的排队信息;
基于所述队头序号确定待访问所述临界区的第一任务对应的原子序号;
若所述队尾序号等于所述原子序号,则控制所述第一任务获取所述临界区的自旋锁。
在本发明实施例的技术方案中,通过CPU的原子操作函数对多个任务进行排队,从而确定用于表征该多个任务访问临界区先后顺序的序号队列,以及用于表征对应任务获取该临界区的自旋锁的排队信息的该序号队列的队头序号和队尾序号。然后,基于该队头序号,确定待访问该临界区的第一任务对应的原子序号;也就是说,原子排队取号,确定排队号;若队尾序号等于该原子序号,则控制该待访问该临界区的第一任务获取该临界区的自旋锁。也就是说,通过原子取号与队尾序号(即表征当前正在访问临界区的任务的原子序号)进行比对,从而控制多个任务排队获取该临界区的自旋锁,进而实现对临界区的排队访问,从而提高了自旋锁的获取效率。
可选地,所述方法还包括:
若所述队尾序号不等于所述原子序号,则基于所述原子序号与所述队尾序号,确定所述第一任务的等待时延;
在所述等待时延结束后,控制所述第一任务尝试获取所述自旋锁。
在本发明实施例的技术方案中,若队尾序号不等于该原子序号,则确定该待访问临界区的第一任务的等待时延。在该等待时延结束后,控制该第一任务重新尝试获取该自旋锁。也就是说,原子排队期间,通过待访问临界区的第一任务的排队号与队尾序号(即当前正在访问临界区的任务的原子序号)进行比对,进而确定该第一任务的等待时延。然后,在该第一任务延时等待相应的时延后,再来尝试获取该自旋锁,从而提高并发效率。
可选地,在控制所述第一任务获取所述临界区的自旋锁之后,所述方法还包括:在所述第一任务访问所述临界区之后,控制所述第一任务释放所述自旋锁。
可选地,基于所述原子序号与所述队尾序号确定所述第一任务的等待时延,包括:
确定所述原子序号与所述队尾序号的差值;
将所述差值与延时基准间的乘积,确定为所述第一任务的等待时延。
可选地,在控制所述待访问所述第一任务获取所述临界区的自旋锁之后,所述方法还包括:
对所述临界区增加写锁;
控制所述第一任务访问所述临界区。
可选地,在控制所述第一任务访问所述临界区之后,所述方法还包括:
释放所述写锁;
控制所述第一任务释放所述自旋锁。
第二方面,本发明实施例还提供了一种获取自旋锁的装置,包括:
排队单元,通过CPU的原子操作函数对多个任务进行排队;
第一确定单元,确定用于表征所述多个任务访问临界区先后顺序的序号队列,以及所述序号队列的队头序号和队尾序号,其中,所述队头序号和所述队尾序号用于表征对应任务获取所述临界区的自旋锁的排队信息;
第二确定单元,基于所述队头序号确定待访问所述临界区的第一任务对应的原子序号;
第一控制单元,若所述队尾序号等于所述原子序号,则控制所述第一任务获取所述临界区的自旋锁。
可选地,所述装置还包括:
第三确定单元,若所述队尾序号不等于所述原子序号,则基于所述原子序号与所述队尾序号确定所述第一任务的等待时延;
第二控制单元,在所述等待时延结束后,控制所述第一任务尝试获取所述自旋锁。
可选地,所述装置还包括:
第三控制单元,在所述第一任务访问所述临界区之后,控制所述第一任务释放所述自旋锁。
可选地,所述第三确定单元用于:
确定所述原子序号与所述队尾序号的差值;
将所述差值与延时基准间的乘积,确定为所述第一任务的等待时延。
可选地,所述第一控制单元还用于:
对所述临界区增加写锁;
控制所述第一任务访问所述临界区。
可选地,所述第一控制单元还用于:
释放所述写锁;
控制所述第一任务释放所述自旋锁。
第三方面,本发明实施例还提供了一种计算机装置,所述计算机装置包括处理器,所述处理器用于执行存储器中存储的计算机程序时实现如第一方面所述的获取自旋锁方法的步骤。
第四方面,本发明实施例还提供了一种可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如第一方面所述的获取自旋锁方法的步骤。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例。
图1为本发明实施例提供的一种获取自旋锁的方法流程图;
图2为本发明实施例提供的一种获取自旋锁的另外一种方法流程图;
图3为本发明实施例提供的一种获取自旋锁中释放锁的流程图;
图4为本发明实施例提供的任务访问临界区的其中一种流程图;
图5为本发明实施例提供的一种获取自旋锁中步骤S201的方法流程图;
图6为本发明实施例提供的一种获取自旋锁的其中一种示意图;
图7为本发明实施例提供的一种获取自旋锁中步骤S104之后的方法流程图;
图8为本发明实施例提供的一种获取自旋锁中步骤S402之后的方法流程图;
图9为本发明实施例提供的一种获取自旋锁中任一任务写临界区的流程图;
图10为本发明实施例提供的一种获取自旋锁中任一任务读临界区的流程图;
图11为本发明实施例提供的一种获取自旋锁的装置的结构示意图。
具体实施方式
本发明的说明书和权利要求书及上述附图中的“第一”、“第二”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”以及它们的任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本发明的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
为了更好的理解上述技术方案,下面通过附图以及具体实施例对本发明技术方案做详细的说明,应当理解本申请实施例以及实施例中的具体特征是对本发明技术方案的详细的说明,而不是对本发明技术方案的限定,在不冲突的情况下,本申请实施例以及实施例中的技术特征可以相互结合。
在介绍本发明实施例之前,首先,对自旋锁的原理进行简单的介绍。
自旋锁和互斥锁一样,一个执行单元要想访问被自旋锁保护的共享资源,必须先得到锁,在访问完该共享资源后,必须释放锁。如果在获取该自旋锁时,没有任何执行单元保持该锁,那么将立即得到锁;如果在获取自旋锁时锁已经有保持者,那么获取锁操作将自旋在那里,直到该自旋锁的保持者释放了锁。因为自旋锁在同一时刻只能被一个内核任务持有,所有一个时刻只有一个线程允许存在于临界区中。自旋锁在内核中主要用来防止多处理器中并发访问临界区,防止内核抢占造成的竞争,另外,自旋锁不允许任务睡眠,它能够在中断上下文中使用。
请参考图1,本发明实施例提供了一种获取自旋锁的方法,包括:
S101:通过CPU的原子操作函数对多个任务进行排队;
S102:确定用于表征所述多个任务访问临界区先后顺序的序号队列,以及所述序号队列的队头序号和队尾序号,其中,所述队头序号和所述队尾序号用于表征对应的任务获取所述临界区的自旋锁的排队信息;
S103:基于所述队头序号确定待访问所述临界区的第一任务对应的原子序号;
S104:若所述队尾序号等于所述原子序号,则控制所述第一任务获取所述临界区的自旋锁。
在本发明实施例中,在共享内存中存储用于表征是否能够获取自旋锁的两个全局变量,一个是队头序号变量,另一个是队尾序号变量。所有要获取该自旋锁的任务均要访问这两个变量。系统初始化时,队头序号变量被初始化为0,队尾序号变量初始化为1。通过控制“队头序号+1”来表征加锁,控制“队尾序号+1”来表征释放锁。其中,队头序号表征当前排队任务(即待访问临界区的任务)的序号,在具体实施过程中,队头序号往往用来表示最后一个排队取锁任务的序号。队尾序号表征当前获取到临界区的自旋锁的任务的序号,也就是说,当前取锁成功的任务的序号。在具体实施过程中,队头序号和队尾序号属于序号队列的两个不同的属性。
在本发明实施例中,步骤S101至步骤S104的具体实现过程如下:
在多个任务访问临界区时,首先进行取锁,具体来讲,通过CPU的原子操作函数(atomic_inc_return)对多个任务进行排队,然后,确定用于表征该多个任务访问临界区先后顺序的序号队列,以及用于表征对应任务获取临界区的自旋锁的排队信息的队头序号和队尾序号。其中,该排队信息记录的是排队的序号信息。由于对多个任务进行排队操作的是原子,因此,每个访问临界区的任务的原子序号是彼此不同的,其中,原子序号也就是原子变量。在具体实施过程中,通过CPU的原子操作函数对这多个任务进行排队,最终能够确定表征该多个任务访问临界区先后顺序的序号队列,以及该序号队列的队头序号和队尾序号。比如,任务A、B、C依次对应的原子序号为1、2、3。此时的队头序号为1,队尾序号为3。
然后,基于该队头序号确定待访问该临界区的第一任务对应的原子序号。也就是说,通过原子排队取号,确定待访问该临界区的第一任务对应的原子序号。在具体实施过程中,具体采用“取号=队头序号+1”最终确定当前所取的号。比如,若队头序号为1,表示当前所取的序号为“2”。基于所取的序号进而确定该序号所对应的待访问临界区的任务为任务B。
然后,对队尾序号是否等于该原子序号进行判断。也就是说,对当前所取的序号是否等于当前的队尾序号进行判断。仍然以上述例子为例,在任务A访问临界区之后,通过“队尾序号+1”释放锁,此时“队尾序号=2”。若当前所取的序号为“2”,此时所取的序号与当前的队尾序号相同,则原子序号为“2”的任务B便可以获取该临界区的自旋锁。也就是说,通过原子取号与队尾序号(即表征当前正在访问临界区的任务的原子序号)进行比对,从而控制多个任务排队获取该临界区的自旋锁,进而实现对临界区的排队访问,从而提高了自旋锁的获取效率。
在本发明实施例中,为了提高并发效率,请参考图2,所述方法还包括:
S201:若所述队尾序号不等于所述原子序号,则基于所述原子序号与所述队尾序号确定所述第一任务的等待时延;
S202:在所述等待时延结束后,控制所述第一任务尝试获取所述自旋锁。
在具体实施过程中,步骤S201至步骤S202的具体实现过程如下:
若队尾序号不等于该原子序号,则基于该原子序号和该队尾序号,确定待访问临界区的第一任务的等待时延。也就是说,在原子排队期间,通过排队所取的序号与当前正在访问临界区的任务的原子序号进行比对,若二者不相等,则进一步地确定排队所取的序号对应任务的等待时延。然后,在该等待时延结束后,控制该待访问临界区的第一任务尝试获取该自旋锁。比如,确定出所取序号对应的任务C的等待时延为2s,则在2s之后,该任务C重新尝试获取该自旋锁。该任务C所对应的序号重新与2s后的队尾序号进行比对,进一步判断任务C当前是否能够获取该自旋锁。即便是有较多任务来访问临界区时,通过等待时延来实现对各个任务获取自旋锁的控制,能够有效提高并发效率。
在本发明实施例中,在步骤S104:控制所述第一任务获取所述临界区的自旋锁之后,所述方法还包括:在所述第一任务访问所述临界区之后,控制所述第一任务释放所述自旋锁。在具体实施过程中,具体可以通过“队尾序号+1”来实现对当前释放自旋锁的任务的叫号。具体来讲,在每个任务访问完临界区之后,便释放该自旋锁,以便其它任务来访问该临界区,从而通过及时释放总线,提高了并发效率。如图3所示为释放锁的流程图,图3中各个执行步骤在上述已经详述,在此就不再赘述了。
在本发明实施例中,任务访问临界区的其中一种流程图4所示,具体来讲,待访问临界区的任务访问该临界区时,首先,该任务进行取锁(自旋锁);然后,由该临界区进行相应的处理,该任务获取该临界区内的公共资源;然后,在该任务访问该临界区的公共资源之后,释放先前所获取到的自旋锁。
在本发明实施例中,为了提高并发效率,请参考图5,步骤S201:若所述队尾序号不等于所述原子序号,则基于所述原子序号与所述队尾序号,确定所述第一任务的等待时延,包括:
S301:确定所述原子序号与所述队尾序号的差值;
S302:将所述差值与延时基准间的乘积,确定为所述第一任务的等待时延。
在具体实施过程中,步骤S301至步骤S302的具体实现过程如下:
首先,确定该原子序号与队尾序号间的差值,也就是说,确定当前所取的原子序号与当前的队尾序号间的差值,该差值具体形式为“取号-队尾序号”。然后,将该差值与延时基准间的乘积,确定为该第一任务的等待时延。具体来讲,等待时延=(取号-队尾序号)×延时基准。比如,当前所取的序号为“2”,但是当前序号队列的队尾序号为“1”,二者间的差值为“1”,在延时基准为“1ns”时,当前所取的序号“2”对应的任务B的等待时延则为1ns。在等待1ns的时间之后,任务B重新尝试获取该自旋锁。具体仍通过对当前所取的序号是否等于当前序号队列的队尾序号进行对比。在具体实施过程中,获取自旋锁的其中一种示意图如图6所示,由于相关步骤在上述内容中已经详述,在此就不再赘述。
为了提高写锁的并发效率,还可以将本案获取自旋锁的方法应用于读写锁。其中,读写锁往往用于解决写者与读者的互斥问题。将自旋锁用于写锁中,可以解决写者间的互斥问题。
在本发明实施例中,为了提高读写锁中写锁的获取效率,请参考图7,在步骤S104:若所述队尾序号等于所述原子序号,则控制所述第一任务获取所述临界区的自旋锁之后,所述方法还包括:
S401:对所述临界区增加写锁;
S402:控制所述第一任务访问所述临界区。
在具体实施过程中,步骤S401至步骤S402的具体实现过程如下:
在多个任务访问临界区进行写操作时,首先,按照步骤S101~S104进行取锁(或加自旋锁)。具体来讲,在待访问该临界区的第一任务获取该临界区的自旋锁之后,对该临界区进行增加写锁,然后,临界区进行处理,即控制该待访问该临界区的第一任务访问该临界区。
在本发明实施例中,在步骤S402之后,请参考图8,所述方法还包括:
S501:释放所述写锁;
S502:控制所述第一任务释放所述自旋锁。
在具体实施过程中,在待访问临界区的第一任务访问该临界区之后,及时释放该写锁,以及释放该自旋锁,如此一来,其它任务才有权限去获取该自旋锁,以及才能进行相应的加锁来实现写操作,从而提高了写锁的并发效率。如图9所示为任一任务写临界区的流程图。其中,对加自旋锁的操作仍采用图6中所示的方法来实现。对释放自旋锁的操作仍采用图3中所示的方法来实现。加写锁以及释放写锁所采用的方法仍可以为现有技术中所采用的方法,在此就不再详述了。
在本发明实施例中,在多个任务访问临界区进行读操作时,首先基于对应任务对该临界区进行加读锁,相应地该任务访问该临界区。在该任务访问该临界区之后,释放读锁,以便其它任务有权限去进行相应的加读锁,从而实现了读写锁的获取效率。如图10所示为任一任务读临界区的流程图。其中,加读锁以及释放读锁所采用的方法仍可以为现有技术中所采用的方法,在此就不再详述了。
在本发明实施例中,以博通XLP964,1.2GHz主频,16核64线程处理器为例,临界区空闲链表分配为例,测试数据如表1所示。
表1
基于同样的发明构思,请参考图11,本申请实施例还提供了一种获取自旋锁的装置,包括:
排队单元10,通过CPU的原子操作函数对多个任务进行排队;
第一确定单元20,确定用于表征所述多个任务访问临界区先后顺序的序号队列,以及所述序号队列的队头序号和队尾序号,其中,所述队头序号和所述队尾序号用于表征对应任务获取所述临界区的自旋锁的排队信息;
第二确定单元30,基于所述队头序号确定待访问所述临界区的第一任务对应的原子序号;
第一控制单元40,若所述队尾序号等于所述原子序号,则控制所述第一任务获取所述临界区的自旋锁。
在本发明实施例中,所述装置还包括:
第三确定单元,若所述队尾序号不等于所述原子序号,则基于所述原子序号与所述队尾序号确定所述第一任务的等待时延;
第二控制单元,在所述等待时延结束后,控制所述第一任务尝试获取所述自旋锁。
在本发明实施例中,所述装置还包括:
第三控制单元,在所述第一任务访问所述临界区之后,控制所述第一任务释放所述自旋锁。
在本发明实施例中,所述第三确定单元用于:
确定所述原子序号与所述队尾序号的差值;
将所述差值与延时基准间的乘积,确定为所述第一任务的等待时延。
在本发明实施例中,第一控制单元30还用于:
对所述临界区增加写锁;
控制所述第一任务访问所述临界区。
在本发明实施例中,第一控制单元30还用于:
释放所述写锁;
控制所述第一任务释放所述自旋锁。
基于同一发明构思,本发明实施例还提供了一种计算机装置,所述计算机装置包括处理器,所述处理器用于执行存储器中存储的计算机程序时实现如本发明实施例提供的获取自旋锁方法的步骤。
可选的,处理器具体可以是中央处理器、特定应用集成电路(英文:ApplicationSpecific Integrated Circuit,简称:ASIC),可以是一个或多个用于控制程序执行的集成电路。
可选的,该计算机装置还包括与处理器连接的存储器,存储器可以包括只读存储器(英文:Read Only Memory,简称:ROM)、随机存取存储器(英文:Random Access Memory,简称:RAM)和磁盘存储器。存储器用于存储处理器运行时所需的数据,即存储有可被处理器执行的指令,处理器通过执行存储器存储的指令,执行如图1所示的获取自旋锁的方法。其中,存储器的数量为一个或多个。其中,存储器不是必选的功能模块。
其中,该计算机装置可以用于执行图1所示的实施例所提供的获取自旋锁的方法。因此关于该设备中各功能模块所能够实现的功能,可参考图1所示的实施例中的相应描述,不多赘述。
本发明实施例还提供一种可读存储介质,其中,可读存储介质存储有计算机程序,当计算机程序在计算机上运行时,使得计算机执行如图1所述的获取自旋锁的方法。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:通用串行总线闪存盘(Universal Serial Bus flash disk)、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (10)
1.一种获取自旋锁的方法,其特征在于,包括:
通过CPU的原子操作函数对多个任务进行排队;
确定用于表征所述多个任务访问临界区先后顺序的序号队列,以及所述序号队列的队头序号和队尾序号,其中,所述队头序号和所述队尾序号用于表征对应的任务获取所述临界区的自旋锁的排队信息;
基于所述队头序号确定待访问所述临界区的第一任务对应的原子序号;
若所述队尾序号等于所述原子序号,则控制所述第一任务获取所述临界区的自旋锁。
2.如权利要求1所述的方法,其特征在于,所述方法还包括:
若所述队尾序号不等于所述原子序号,则基于所述原子序号与所述队尾序号确定所述第一任务的等待时延;
在所述等待时延结束后,控制所述第一任务尝试获取所述自旋锁。
3.如权利要求1所述的方法,其特征在于,在控制所述第一任务获取所述临界区的自旋锁之后,所述方法还包括:
在所述第一任务访问所述临界区之后,控制所述第一任务释放所述自旋锁。
4.如权利要求2所述的方法,其特征在于,基于所述原子序号与所述队尾序号确定所述第一任务的等待时延,包括:
确定所述原子序号与所述队尾序号的差值;
将所述差值与延时基准间的乘积,确定为所述第一任务的等待时延。
5.如权利要求1-4任一权项所述的方法,其特征在于,在控制所述第一任务获取所述临界区的自旋锁之后,所述方法还包括:
对所述临界区增加写锁;
控制所述第一任务访问所述临界区。
6.如权利要求5所述的方法,其特征在于,在控制所述第一任务访问所述临界区之后,所述方法还包括:
释放所述写锁;
控制所述第一任务释放所述自旋锁。
7.一种获取自旋锁的装置,其特征在于,包括:
排队单元,通过CPU的原子操作函数对多个任务进行排队;
第一确定单元,确定用于表征所述多个任务访问临界区先后顺序的序号队列,以及所述序号队列的队头序号和队尾序号,其中,所述队头序号和所述队尾序号用于表征对应任务获取所述临界区的自旋锁的排队信息;
第二确定单元,基于所述队头序号确定待访问所述临界区的第一任务对应的原子序号;
第一控制单元,若所述队尾序号等于所述原子序号,则控制所述第一任务获取所述临界区的自旋锁。
8.如权利要求7所述的装置,其特征在于,所述装置还包括:
第三确定单元,若所述队尾序号不等于所述原子序号,则基于所述原子序号与所述队尾序号确定所述第一任务的等待时延;
第二控制单元,在所述等待时延结束后,控制所述第一任务尝试获取所述自旋锁。
9.一种计算机装置,其特征在于,所述计算机装置包括处理器,所述处理器用于执行存储器中存储的计算机程序时实现如权利要求1~6任一项所述的获取自旋锁方法的步骤。
10.一种可读存储介质,其上存储有计算机程序,其特征在于:所述计算机程序被处理器执行时实现如权利要求1~6任一项所述的获取自旋锁方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811347706.XA CN109558241A (zh) | 2018-11-13 | 2018-11-13 | 一种获取自旋锁的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811347706.XA CN109558241A (zh) | 2018-11-13 | 2018-11-13 | 一种获取自旋锁的方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109558241A true CN109558241A (zh) | 2019-04-02 |
Family
ID=65866342
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811347706.XA Pending CN109558241A (zh) | 2018-11-13 | 2018-11-13 | 一种获取自旋锁的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109558241A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111158890A (zh) * | 2020-01-20 | 2020-05-15 | 北京一流科技有限公司 | 控制任务集中的任务并行的系统及其方法 |
CN112306698A (zh) * | 2019-07-29 | 2021-02-02 | 华为技术有限公司 | 一种numa系统中的临界区执行方法及装置 |
CN112306703A (zh) * | 2019-07-29 | 2021-02-02 | 华为技术有限公司 | 一种numa系统中的临界区执行方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8127303B2 (en) * | 2005-08-30 | 2012-02-28 | Intel Corporation | Fair scalable reader-writer mutual exclusion |
CN104932933A (zh) * | 2014-03-21 | 2015-09-23 | 华为技术有限公司 | 一种获取自旋锁的方法及装置 |
CN106649180A (zh) * | 2016-09-09 | 2017-05-10 | 锐捷网络股份有限公司 | 一种解除i2c总线死锁的方法及装置 |
CN107357648A (zh) * | 2017-05-25 | 2017-11-17 | 吕锦柏 | 一种多核cpu访问资源时自旋锁的实现方法 |
-
2018
- 2018-11-13 CN CN201811347706.XA patent/CN109558241A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8127303B2 (en) * | 2005-08-30 | 2012-02-28 | Intel Corporation | Fair scalable reader-writer mutual exclusion |
CN104932933A (zh) * | 2014-03-21 | 2015-09-23 | 华为技术有限公司 | 一种获取自旋锁的方法及装置 |
CN106649180A (zh) * | 2016-09-09 | 2017-05-10 | 锐捷网络股份有限公司 | 一种解除i2c总线死锁的方法及装置 |
CN107357648A (zh) * | 2017-05-25 | 2017-11-17 | 吕锦柏 | 一种多核cpu访问资源时自旋锁的实现方法 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112306698A (zh) * | 2019-07-29 | 2021-02-02 | 华为技术有限公司 | 一种numa系统中的临界区执行方法及装置 |
CN112306703A (zh) * | 2019-07-29 | 2021-02-02 | 华为技术有限公司 | 一种numa系统中的临界区执行方法及装置 |
CN111158890A (zh) * | 2020-01-20 | 2020-05-15 | 北京一流科技有限公司 | 控制任务集中的任务并行的系统及其方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8381230B2 (en) | Message passing with queues and channels | |
US7139855B2 (en) | High performance synchronization of resource allocation in a logically-partitioned system | |
US8375390B2 (en) | Scheduling method and scheduling apparatus | |
EP3230860B1 (en) | Technologies for efficient synchronization barriers with work stealing support | |
US20130160028A1 (en) | Method and apparatus for low latency communication and synchronization for multi-thread applications | |
CN109558241A (zh) | 一种获取自旋锁的方法及装置 | |
RU2437144C2 (ru) | Способ устранения исключительной ситуации в одном из ядер многоядерной системы | |
EP3379421B1 (en) | Method, apparatus, and chip for implementing mutually-exclusive operation of multiple threads | |
US8024739B2 (en) | System for indicating and scheduling additional execution time based on determining whether the execution unit has yielded previously within a predetermined period of time | |
CN102667714B (zh) | 支持访问由操作系统环境外的资源提供的功能的方法和系统 | |
US20070061810A1 (en) | Method and system for providing access to a shared resource utilizing selective locking | |
US6295602B1 (en) | Event-driven serialization of access to shared resources | |
CN115509986A (zh) | 核间通信方法、电子设备及存储介质 | |
CN112306669A (zh) | 一种基于多核系统的任务处理方法及装置 | |
CN114490123A (zh) | 一种任务处理方法、装置及电子设备和存储介质 | |
WO2022237419A1 (zh) | 任务执行方法、装置及存储介质 | |
US8543722B2 (en) | Message passing with queues and channels | |
US20100251250A1 (en) | Lock-free scheduler with priority support | |
US20200201691A1 (en) | Enhanced message control banks | |
CN112596669A (zh) | 一种基于分布式存储的数据处理方法及装置 | |
CN111694787A (zh) | 一种芯片启动的方法、网络设备和机器可读存储介质 | |
CN112346879B (zh) | 进程管理方法、装置、计算机设备及存储介质 | |
US9418175B2 (en) | Enumeration of a concurrent data structure | |
CN113722102B (zh) | 一种内存分配方法及装置 | |
US8689230B2 (en) | Determination of running status of logical processor |
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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190402 |
|
RJ01 | Rejection of invention patent application after publication |