CN115934370A - 自旋锁的获取方法、装置、设备及存储介质 - Google Patents

自旋锁的获取方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN115934370A
CN115934370A CN202211664341.XA CN202211664341A CN115934370A CN 115934370 A CN115934370 A CN 115934370A CN 202211664341 A CN202211664341 A CN 202211664341A CN 115934370 A CN115934370 A CN 115934370A
Authority
CN
China
Prior art keywords
spin
processor
lock
spin lock
local
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
Application number
CN202211664341.XA
Other languages
English (en)
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.)
Kedong Guangzhou Software Technology Co Ltd
Original Assignee
Kedong Guangzhou Software 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 Kedong Guangzhou Software Technology Co Ltd filed Critical Kedong Guangzhou Software Technology Co Ltd
Priority to CN202211664341.XA priority Critical patent/CN115934370A/zh
Publication of CN115934370A publication Critical patent/CN115934370A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本发明公开了一种自旋锁的获取方法、装置、设备及存储介质。该方法包括:当前处理器申请自旋锁时,所述处理器获取预先分配的本地锁结构;所述本地锁结构包括本地自旋变量;处理器获取自旋锁的占用状态,若未被占用,则直接获取自旋锁;否则,配置本地自旋变量为第一值,并将本处理器挂接到自旋锁申请链末端的处理器上,自旋等待本地自旋变量为第二值时,获取自旋锁。本实施例,通过基于链表结构的自旋锁以及在根据处理器的自旋锁的占用状态进行自旋锁分配的过程中,作为锁申请者的处理器仅在本地自旋等待自旋锁的方式,极大地减少了不必要的处理器缓存同步的次数,降低了总线和内存的开销,提高了自旋锁的性能,也极大提高了内核的性能。

Description

自旋锁的获取方法、装置、设备及存储介质
技术领域
本发明实施例涉及资源共享技术领域,尤其涉及一种自旋锁的获取方法、装置、设备及存储介质。
背景技术
随着多核技术的发展,越来越多的计算机设备使用多核处理器,然而多核硬件的发展引入了新的同步问题,为了解决多核的同步问题,保证共享资源访问的正确性,引入了自旋锁(如:自旋锁或者互斥锁)技术。
现有的自旋锁在实现过程中会引起处理器间频繁的进行缓存同步,频繁的缓存同步操作会导致繁重的系统总线和内存的流量,从而大大降低了系统整体的性能。
发明内容
本发明实施例提供一种自旋锁的获取方法、装置、设备及存储介质,极大地减少了不必要的处理器缓存同步的次数,降低了总线和内存的开销,提高了自旋锁的性能,也极大提高了内核的性能。
第一方面,本发明实施例提供了一种自旋锁的获取方法,包括:当前处理器申请自旋锁时,所述处理器获取预先分配的本地锁结构;所述本地锁结构包括本地自旋变量;所述处理器获取自旋锁的占用状态,若未被占用,则直接获取自旋锁;否则,配置所述本地自旋变量为第一值,并将本处理器挂接到自旋锁申请链末端的处理器上,自旋等待所述本地自旋变量为第二值时,获取自旋锁。
第二方面,本发明实施例还提供了一种自旋锁的获取装置,包括:
本地锁结构获取模块,用于当前处理器申请自旋锁时,所述处理器获取预先分配的本地锁结构;所述本地锁结构包括本地自旋变量;占用状态获取模块,用于所述处理器获取自旋锁的占用状态,若未被占用,则直接获取自旋锁;否则,配置所述本地自旋变量为第一值,并将本处理器挂接到自旋锁申请链末端的处理器上,自旋等待所述本地自旋变量为第二值时,获取自旋锁。
第三方面,本公开实施例还提供了一种电子设备,所述电子设备包括:
一个或多个处理器;
存储器,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如本公开实施例所述的自旋锁的获取方法。
第四方面,本公开实施例还提供了一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行如本公开实施例所述的自旋锁的获取方法。
本实施例的技术方案,通过当前处理器申请自旋锁时,处理器获取预先分配的本地锁结构;本地锁结构包括本地自旋变量;处理器获取自旋锁的占用状态,若未被占用,则直接获取自旋锁;否则,配置本地自旋变量为第一值,并将本处理器挂接到自旋锁申请链末端的处理器上,自旋等待本地自旋变量为第二值时,获取自旋锁。本公开实施例,通过基于链表结构的自旋锁以及在根据处理器的自旋锁的占用状态进行自旋锁分配的过程中,作为锁申请者的处理器仅在本地自旋等待自旋锁的方式,极大地减少了不必要的处理器缓存同步的次数,降低了总线和内存的开销,提高了自旋锁的性能,也极大提高了内核的性能。
附图说明
图1为本发明实施例提供的一种自旋锁的获取方法的流程图;
图2为本发明实施例提供的每个处理器作为锁申请者时的本地锁结构;
图3是本发明实施例提供的另一种自旋锁的获取方法示意效果图;
图4为本发明实施例提供的另一种自旋锁的获取方法;
图5为本公开实施例所提供的一种自旋锁的获取装置结构示意图;
图6是本公开实施例所提供的一种电子设备的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
图1为本发明实施例提供的一种自旋锁的获取方法的流程图,本实施例可适用于多核处理器访问共享资源的情况,该方法可以由一种自旋锁的获取装置来执行,该装置可以通过软件和/或硬件的形式实现,可选的,通过电子设备来实现,该电子设备可以是移动终端、PC端或服务器等。具体包括如下步骤:
S110、当前处理器申请自旋锁时,处理器获取预先分配的本地锁结构。
其中,当前处理器可以是多核处理器中当前处理器。自旋锁可以是一种基于任意数据结构的自旋锁,例如可以是基于堆栈、排队、链表等结构的自旋锁。本实施例中,优选为链表结构的自旋锁。
本实施例中,处理器可以作为锁申请者获取自旋锁,通过自旋锁访问资源。每个锁申请者均包括一个本地锁结构,本地锁结构包括本地自旋变量。例如本地自旋变量为0时,表示锁申请者申请到了自旋锁,本地自旋变量为1时,表示锁申请者处于自旋等待状态。
S120、处理器获取自旋锁的占用状态,若未被占用,则直接获取自旋锁;否则,配置本地自旋变量为第一值,并将本处理器挂接到自旋锁申请链末端的处理器上,自旋等待本地自旋变量为第二值时,获取自旋锁。
其中,占用状态可以为未被占用或被占用。若占用状态为未被占用,则表明自旋锁没有被占用,处理器可以直接获取自旋锁,若占用状态为被占用,则表明自旋锁被占用,配置本地自旋变量为第一值,并将本处理器挂接到自旋锁申请链末端的处理器上,自旋等待本地自旋变量为第二值时,获取自旋锁。其中,第一值可以为1,第二值可以为0。自旋锁申请链可以理解为一个单向链表。
可选的,本地锁结构还包括:指向下一自旋锁申请处理器的节点指向变量。将本处理器挂接到自旋锁申请链末端的处理器上的方式可以是:将自旋锁申请链末端的处理器的节点指向变量指向当前处理器;其中当前处理器更新为自旋锁申请链末端处理器。
其中,指向变量可以理解为指针向量。本实施例中,当自旋锁的占用状态为被占用,将当前处理器的本地自旋变量配置为第一值,并将自旋锁申请链末端的处理器的指向下一自旋锁申请处理器的节点指向变量指向当前处理器,此时,当前处理器作为自旋锁申请链末端处理器。如图2所示,图2为本发明实施例提供的每个处理器作为锁申请者时的本地锁结构。其中,每个锁申请者仅在一个本地的锁状态信息上自旋。所有锁申请者的信息(本地锁结构)可以串为一个单向链表。本实施例,通过对处理器的本地锁结构的本地自旋变量和指向下一自旋锁申请处理器的节点指向变量进行设置,并将当前处理器挂接到自旋锁申请链末端的处理器的末尾的方式使得当前处理器可以在本地自旋变量为第二值时,通过获取的自旋锁实现对资源的访问。
可选的,本地锁结构与缓存行对齐,且采用设定关键字进行修饰。
需要说明的是,本地锁结构须缓存行对齐,并且由于本地锁结构中的本地自旋变量和指向下一自旋锁申请处理器的节点指向变量可能被其它处理器异步修改,因此可以使用设定关键字(如volatile)关键字修饰,可以确保本地自旋变量和指向下一自旋锁申请处理器的节点指向变量在任何时间呈现的均是最新的值。示例性的,具体代码如下:
typedefstructspinlock_lock_node
{
volatileintwaiting;
structspinlock_lock_node*volatilenext;
}cacheline_alignedspinlock_lock_node;
typedefstruct
{
lock_listlock;
spinlock_lock_nodenodes[MAX_CPUS];
}cacheline_alignedspinlock_t;
其中,spinlock_lock_node代表本地锁结构,waiting代表本地自旋变量,next代表指向下一自旋锁申请处理器的节点指向变量。
可选的,在处理器获取预先分配的本地锁结构后,还包括:将本地锁结构中的节点指向变量设为空。
本实施例中,本地锁结构中的节点指向变量设为空,则相应的自旋锁申请链末端的处理器的节点指向变量也为空。
可选的,处理器获取自旋锁的占用状态的方式可以是:处理器获取自旋锁数据结构;若自旋锁数据结构为空,则自旋锁未被占用;若自旋锁数据结构为非空,则自旋锁被占用。
其中,自旋锁数据结构为指向自旋锁申请链末端处理器的指向变量。上述示例中的“lock_listlock”可以认为是自旋锁数据结构。本实施例中,若自旋锁数据结构为空,则自旋锁未被占用,即自旋锁处于未被占用状态时,自旋锁数据结构设置为空。若自旋锁数据结构为非空,则自旋锁被占用。本实施例,通过处理器获取自旋锁数据结构,并基于自旋锁数据结构判断自旋锁是否被占用的方式,可以有效并准确的对自旋锁的占用状态进行判断。
可选的,直接获取自旋锁,还包括:在处理器直接获取自旋锁时,配置自旋锁数据结构指向处理器。
本实施例中,若自旋锁数据结构为空,则自旋锁未被占用,当前处理器可以直接获取自旋锁,并且在获取自旋锁的同时,将自旋锁数据结构指向当前处理器。另外,如果自旋锁数据结构不为空,则说明自旋锁已经被占用,也可以将自旋锁数据结构指向当前处理器。本实施例,通过在处理器直接获取自旋锁时,配置自旋锁数据结构指向处理器,从而实现对自旋锁的占用状态的调整。
可选的,对于释放自旋锁的过程可以是:当前处理器释放自旋锁时,判断当前处理器的节点指向变量是否为空;若节点指向变量为空,则将自旋锁的自旋锁数据结构配置为空;若节点指向变量为非空,则配置下一个自旋锁申请处理器的本地自旋变量为第二值,以使下一自旋锁申请处理器获取到自旋锁。
本实施例中,当前处理器释放自旋锁时的具体过程如下:在获取到本地自旋变量和指向下一自旋锁申请处理器的节点指向变量之后,判断当前处理器的节点指向变量是否为空,如果节点指向变量为空,表明该自旋锁没有其他处理器等待获取,则将该自旋锁的自旋锁数据结构设置为空。如果节点指向变量为非空,表明该自旋锁有其他处理器等待获取,则将当前处理器的下一个自旋锁申请处理器的本地自旋变量设置为第二值,使下一自旋锁申请处理器退出自旋等待,获取该自旋锁。
本实施例中,通过处理器包括本地自旋变量和指向下一自旋锁申请处理器的节点指向变量,从而实现了基于链表的可扩展、高性能、公平的自旋锁,并且相对现有技术中,每个处理器均在同一个共享变量上自旋,在申请资源和释放资源时必须对共享变量进行修改,从而造成所有处理器的缓存变得无效,以及频繁的缓存同步操作导致繁重的系统总线和内存的流量的方式而言,本实施例通过链表结构的自旋锁以及每个锁申请者仅在本地变量上自旋的方式,可以有效减少不必要的处理器缓存同步的次数,降低系统总线和内存的开销,提高自旋锁的性能。
示例性的,图3是本发明实施例提供的另一种自旋锁的获取方法示意效果图。如图3所示,处理器1获取自旋锁,处理器1中的本地自旋变量为0,对于处理器1的下一处理器2,处理器2中的本地自旋变量为1,表示自旋等待自旋锁中。对于处理器2的下一处理器3,处理器3中的本地自旋变量为1,表示自旋等待自旋锁中。需要说明的是,本地锁结构中本地自旋变量初始值为0,自旋等待的自旋锁申请处理器,等待其直接前驱(前一处理器)释放锁,本地自旋变量为0时,结束自旋等待状态。若处理器1释放资源时,则设置处理器2的本地自旋变量为0,以将自旋锁分配至处理器2。若处理器2释放资源时,则设置处理器3的本地自旋变量为0,以将自旋锁分配至处理器3。
本实施例中,自旋锁是一种基于链表的可扩展、高性能、公平的自旋锁,处理器只在本地变量上自旋,前一个处理器负责通知当前处理器结束自旋等待,从而极大地减少了不必要的处理器缓存同步的次数,降低了总线和内存的开销。高性能自旋锁通过避免多个核访问同一个内存地址或者数据结构,每个核避免和其他核共享数据,从而减少因为数据共享导致的缓存一致性的开销,大大提高了缓冲命中率,提供了自旋锁的效率。
本实施例的技术方案,通过当前处理器申请自旋锁时,处理器获取预先分配的本地锁结构;本地锁结构包括本地自旋变量;处理器获取自旋锁的占用状态,若未被占用,则直接获取自旋锁;否则,配置本地自旋变量为第一值,并将本处理器挂接到自旋锁申请链末端的处理器上,自旋等待本地自旋变量为第二值时,获取自旋锁。本公开实施例,通过基于链表结构的自旋锁以及在根据处理器的自旋锁的占用状态进行自旋锁分配的过程中,作为锁申请者的处理器仅在本地自旋等待自旋锁的方式,极大地减少了不必要的处理器缓存同步的次数,降低了总线和内存的开销,提高了自旋锁的性能,也极大提高了内核的性能。
图4为本发明实施例提供的另一种自旋锁的获取方法。如图4所示,以申请自旋锁为例,具体步骤如下:
S210、获取当前处理器的本地锁结构,并将本地锁结构中的指向下一自旋锁申请处理器的节点指向变量设置为空。
S220、若自旋锁的自旋锁数据结构为空,则将自旋锁的自旋锁数据结构指向当前处理器。
S230、若自旋锁的自旋锁数据结构为非空,则将自旋锁的自旋锁数据结构指向当前处理器,以及将当前处理器的本地自旋变量设置为第一值,并将本处理器挂接到自旋锁申请链末端的处理器上,自旋等待本地自旋变量为第二值时,获取自旋锁。
对于释放自旋锁,释放自旋锁时的具体过程可以是:首先获取当前处理器的本地锁结构(本地自旋变量和指向下一自旋锁申请处理器的节点指向变量),然后判断当前处理器的节点指向变量是否为空,如果当前处理器的节点指向变量为空,则将自旋锁的自旋锁数据结构设置为空。如果当前处理器的节点指向变量不为空,则配置下一个自旋锁申请处理器的本地自旋变量为第二值,以使下一自旋锁申请处理器获取到自旋锁。
图5为本公开实施例所提供的一种自旋锁的获取装置结构示意图,如图5所示,装置包括:本地锁结构获取模块301及占用状态获取模块302;
本地锁结构获取模块301,用于当前处理器申请自旋锁时,所述处理器获取预先分配的本地锁结构;所述本地锁结构包括本地自旋变量;
占用状态获取模块302,用于所述处理器获取自旋锁的占用状态,若未被占用,则直接获取自旋锁;否则,配置所述本地自旋变量为第一值,并将本处理器挂接到自旋锁申请链末端的处理器上,自旋等待所述本地自旋变量为第二值时,获取自旋锁。
本实施例的技术方案,通过本地锁结构获取模块当前处理器申请自旋锁时,处理器获取预先分配的本地锁结构;本地锁结构包括本地自旋变量;通过占用状态获取模块处理器获取自旋锁的占用状态,若未被占用,则直接获取自旋锁;否则,配置本地自旋变量为第一值,并将本处理器挂接到自旋锁申请链末端的处理器上,自旋等待本地自旋变量为第二值时,获取自旋锁。本公开实施例,通过基于链表结构的自旋锁以及在根据处理器的自旋锁的占用状态进行自旋锁分配的过程中,作为锁申请者的处理器仅在本地自旋等待自旋锁的方式,极大地减少了不必要的处理器缓存同步的次数,降低了总线和内存的开销,提高了自旋锁的性能,也极大提高了内核的性能。
可选的,所述本地锁结构还包括:指向下一自旋锁申请处理器的节点指向变量。
可选的,占用状态获取模块具体用于:将自旋锁申请链末端的处理器的节点指向变量指向所述当前处理器;其中当前处理器更新为自旋锁申请链末端处理器。
可选的,上述装置还包括节点指向变量调整模块,节点指向变量调整模块具体用于:在所述处理器获取预先分配的本地锁结构后,将本地锁结构中的节点指向变量设为空。
可选的,占用状态获取模块还用于:所述处理器获取自旋锁数据结构;其中,所述自旋锁数据结构为指向所述自旋锁申请链末端处理器的指向变量;若所述自旋锁数据结构为空,则所述自旋锁未被占用;若所述自旋锁数据结构为非空,则所述自旋锁被占用。
可选的,占用状态获取模块还用于:在所述处理器直接获取自旋锁时,配置所述自旋锁数据结构指向所述处理器。
可选的,上述装置还包括释放自旋锁模块,释放自旋锁模块具体用于:当前处理器释放所述自旋锁时,判断所述当前处理器的节点指向变量是否为空;若节点指向变量为空,则将所述自旋锁的自旋锁数据结构配置为空;若节点指向变量为非空,则配置下一个自旋锁申请处理器的本地自旋变量为第二值,以使下一自旋锁申请处理器获取到所述自旋锁。
可选的,所述本地锁结构与缓存行对齐,且采用设定关键字进行修饰。
上述装置可执行本发明前述所有实施例所提供的方法,具备执行上述方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本发明前述所有实施例所提供的方法。
图6示出了可以用来实施本发明的实施例的电子设备10的结构示意图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备(如头盔、眼镜、手表等)和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本发明的实现。
如图6所示,电子设备10包括至少一个处理器11,以及与至少一个处理器11通信连接的存储器,如只读存储器(ROM)12、随机访问存储器(RAM)13等,其中,存储器存储有可被至少一个处理器执行的计算机程序,处理器11可以根据存储在只读存储器(ROM)12中的计算机程序或者从存储单元18加载到随机访问存储器(RAM)13中的计算机程序,来执行各种适当的动作和处理。在RAM13中,还可存储电子设备10操作所需的各种程序和数据。处理器11、ROM12以及RAM13通过总线14彼此相连。输入/输出(I/O)接口15也连接至总线14。
电子设备10中的多个部件连接至I/O接口15,包括:输入单元16,例如键盘、鼠标等;输出单元17,例如各种类型的显示器、扬声器等;存储单元18,例如磁盘、光盘等;以及通信单元19,例如网卡、调制解调器、无线通信收发机等。通信单元19允许电子设备10通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
处理器11可以是各种具有处理和计算能力的通用和/或专用处理组件。处理器11的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的处理器、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。处理器11执行上文所描述的各个方法和处理,例如自旋锁的获取方法。
在一些实施例中,自旋锁的获取方法可被实现为计算机程序,其被有形地包含于计算机可读存储介质,例如存储单元18。在一些实施例中,计算机程序的部分或者全部可以经由ROM12和/或通信单元19而被载入和/或安装到电子设备10上。当计算机程序加载到RAM13并由处理器11执行时,可以执行上文描述的自旋锁的获取方法的一个或多个步骤。备选地,在其他实施例中,处理器11可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行自旋锁的获取方法。
本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、负载可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
用于实施本发明的方法的计算机程序可以采用一个或多个编程语言的任何组合来编写。这些计算机程序可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器,使得计算机程序当由处理器执行时使流程图和/或框图中所规定的功能/操作被实施。计算机程序可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本发明的上下文中,计算机可读存储介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的计算机程序。计算机可读存储介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。备选地,计算机可读存储介质可以是机器可读信号介质。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
为了提供与用户的交互,可以在电子设备上实施此处描述的系统和技术,该电子设备具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给电子设备。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)、区块链网络和互联网。
计算系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,又称为云计算服务器或云主机,是云计算服务体系中的一项主机产品,以解决了传统物理主机与VPS服务中,存在的管理难度大,业务扩展性弱的缺陷。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发明中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本发明的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。

Claims (10)

1.一种自旋锁的获取方法,其特征在于,包括:
当前处理器申请自旋锁时,所述处理器获取预先分配的本地锁结构;所述本地锁结构包括本地自旋变量;
所述处理器获取自旋锁的占用状态,若未被占用,则直接获取自旋锁;否则,配置所述本地自旋变量为第一值,并将本处理器挂接到自旋锁申请链末端的处理器上,自旋等待所述本地自旋变量为第二值时,获取自旋锁。
2.根据权利要求1所述的方法,其特征在于,所述本地锁结构还包括:指向下一自旋锁申请处理器的节点指向变量;
所述将本处理器挂接到自旋锁申请链末端的处理器上,包括:
将自旋锁申请链末端的处理器的节点指向变量指向所述当前处理器;其中当前处理器更新为自旋锁申请链末端处理器。
3.根据权利要求1所述的方法,其特征在于,在所述处理器获取预先分配的本地锁结构后,还包括:将本地锁结构中的节点指向变量设为空。
4.根据权利要求2所述的方法,其特征在于,所述处理器获取自旋锁的占用状态,包括:
所述处理器获取自旋锁数据结构;其中,所述自旋锁数据结构为指向所述自旋锁申请链末端处理器的指向变量;
若所述自旋锁数据结构为空,则所述自旋锁未被占用;若所述自旋锁数据结构为非空,则所述自旋锁被占用。
5.根据权利要求4所述的方法,其特征在于,直接获取自旋锁,还包括:
在所述处理器直接获取自旋锁时,配置所述自旋锁数据结构指向所述处理器。
6.根据权利要求4所述的方法,其特征在于,还包括:
当前处理器释放所述自旋锁时,判断所述当前处理器的节点指向变量是否为空;
若节点指向变量为空,则将所述自旋锁的自旋锁数据结构配置为空;
若节点指向变量为非空,则配置下一个自旋锁申请处理器的本地自旋变量为第二值,以使下一自旋锁申请处理器获取到所述自旋锁。
7.根据权利要求2所述的方法,其特征在于,所述本地锁结构与缓存行对齐,且采用设定关键字进行修饰。
8.一种自旋锁的获取装置,其特征在于,包括:
本地锁结构获取模块,用于当前处理器申请自旋锁时,所述处理器获取预先分配的本地锁结构;所述本地锁结构包括本地自旋变量;
占用状态获取模块,用于所述处理器获取自旋锁的占用状态,若未被占用,则直接获取自旋锁;否则,配置所述本地自旋变量为第一值,并将本处理器挂接到自旋锁申请链末端的处理器上,自旋等待所述本地自旋变量为第二值时,获取自旋锁。
9.一种电子设备,其特征在于,所述电子设备包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-7中任一项所述的自旋锁的获取方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使处理器执行时实现权利要求1-7中任一项所述的自旋锁的获取方法。
CN202211664341.XA 2022-12-23 2022-12-23 自旋锁的获取方法、装置、设备及存储介质 Pending CN115934370A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211664341.XA CN115934370A (zh) 2022-12-23 2022-12-23 自旋锁的获取方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211664341.XA CN115934370A (zh) 2022-12-23 2022-12-23 自旋锁的获取方法、装置、设备及存储介质

Publications (1)

Publication Number Publication Date
CN115934370A true CN115934370A (zh) 2023-04-07

Family

ID=86550322

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211664341.XA Pending CN115934370A (zh) 2022-12-23 2022-12-23 自旋锁的获取方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN115934370A (zh)

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080177955A1 (en) * 2007-01-23 2008-07-24 International Business Machines Corporation Achieving Both Locking Fairness and Locking Performance with Spin Locks
CN101403979A (zh) * 2008-10-27 2009-04-08 成都市华为赛门铁克科技有限公司 一种自旋锁的加锁方法及计算机系统
CN104932933A (zh) * 2014-03-21 2015-09-23 华为技术有限公司 一种获取自旋锁的方法及装置
CN105393212A (zh) * 2013-08-14 2016-03-09 国际商业机器公司 使用锁定机制的高效任务调度
US20190079807A1 (en) * 2017-09-14 2019-03-14 Intel Corporation Scalable spinlocks for non-uniform memory access
US20210133184A1 (en) * 2019-11-04 2021-05-06 Shi Wu LO Data sharing method that implements data tag to improve data sharing on multi-computing-unit platform

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080177955A1 (en) * 2007-01-23 2008-07-24 International Business Machines Corporation Achieving Both Locking Fairness and Locking Performance with Spin Locks
CN101403979A (zh) * 2008-10-27 2009-04-08 成都市华为赛门铁克科技有限公司 一种自旋锁的加锁方法及计算机系统
CN105393212A (zh) * 2013-08-14 2016-03-09 国际商业机器公司 使用锁定机制的高效任务调度
CN104932933A (zh) * 2014-03-21 2015-09-23 华为技术有限公司 一种获取自旋锁的方法及装置
US20190079807A1 (en) * 2017-09-14 2019-03-14 Intel Corporation Scalable spinlocks for non-uniform memory access
US20210133184A1 (en) * 2019-11-04 2021-05-06 Shi Wu LO Data sharing method that implements data tag to improve data sharing on multi-computing-unit platform

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
"C++性能优化(十二)——自旋锁", Retrieved from the Internet <URL:http://blog.csdn.net/A642960662/article/details/123029988> *
JOHN M. MELLOR-CRUMMEY ,MICHAEL L. SCOTT: "Algorithms for scalable synchronization on shared-memory multiprocessors", 《ACM TRANSACTIONS ON COMPUTER SYSTEMS》, pages 21 *

Similar Documents

Publication Publication Date Title
JP7454529B2 (ja) 分散型モデルトレーニング装置および方法、電子機器、記憶媒体、ならびに、コンピュータプログラム
CN104126179B (zh) 用于多核处理器中的核心间通信的方法和装置
CN114020470B (zh) 资源分配方法、装置、可读介质及电子设备
EP3955174A2 (en) Method, apparatus and storage medium for training a deep learning framework
EP4394662A1 (en) Training method, apparatus and system for deep learning model, and device and medium
CN113010325B (zh) 一种读写锁的实现方法、装置及电子设备
CN113835887B (zh) 显存的分配方法、装置、电子设备及可读存储介质
US9547576B2 (en) Multi-core processor system and control method
CN111190735A (zh) 一种基于Linux的片上CPU/GPU流水化计算方法及计算机系统
CN110851276A (zh) 一种业务请求处理方法、装置、服务器和存储介质
WO2016202153A1 (zh) 一种gpu资源的分配方法及系统
CN115203126A (zh) 一种算子融合处理方法、装置、设备及存储介质
CN114579323A (zh) 一种线程处理方法、装置、设备及介质
CN116243983A (zh) 处理器、集成电路芯片、指令处理方法、电子设备和介质
CN115934370A (zh) 自旋锁的获取方法、装置、设备及存储介质
CN113377295B (zh) 多生产者单消费者的数据存储和读取方法、装置、设备
US9405470B2 (en) Data processing system and data processing method
CN116431561B (zh) 基于异构众核加速卡的数据同步方法、装置、设备及介质
CN112783421A (zh) 一种基于环形缓冲区的异步消费方法和装置
CN111090517A (zh) 作业调度方法、装置、设备及存储介质
CN116668464B (zh) 一种多串口服务同步处理方法、装置、电子设备及介质
CN116185670B (zh) 内存间的数据交换方法、装置、电子设备及存储介质
CN118250175A (zh) 一种分布式计算实现方法、装置、网卡芯片及介质
CN118626233A (zh) 基于分布式并行大模型的多加速卡多任务调度方法及介质
CN115268790A (zh) 一种数据读写方法、装置、电子设备及存储介质

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: 20230407