CN101403979A - 一种自旋锁的加锁方法及计算机系统 - Google Patents
一种自旋锁的加锁方法及计算机系统 Download PDFInfo
- Publication number
- CN101403979A CN101403979A CNA2008102171057A CN200810217105A CN101403979A CN 101403979 A CN101403979 A CN 101403979A CN A2008102171057 A CNA2008102171057 A CN A2008102171057A CN 200810217105 A CN200810217105 A CN 200810217105A CN 101403979 A CN101403979 A CN 101403979A
- Authority
- CN
- China
- Prior art keywords
- lock
- spin lock
- spin
- drop
- memory block
- 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
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
一种自旋锁的加锁方法,该方法包括:检测到自旋锁为未被持有状态,内核任务获取所述自旋锁,并将所述内核任务的程序代码标识写入锁值存储区,所述锁值存储区用于存储自旋锁的锁值。相应的,本发明实施例还公开了一种自旋锁的加锁装置和计算机系统。本发明实施例通过用于表示自旋锁锁值的存储区中写入内核任务的程序代码标识,在自旋锁死锁时根据该存储区中的信息能够对出错的位置进行快速的定位,在占用系统较小开销的情况下能够较大的缩短了调试周期。
Description
技术领域
本发明涉及计算机领域,尤其涉及计算机领域中的一种自旋锁的加锁方法和装置及计算机系统。
背景技术
多核处理器在高端嵌入式系统中应用广泛,多核处理器是在一片处理器芯片中集成多个处理器核心,每个处理器核心都能单独地运行程序,使程序认为自己运行在一个独立的处理器上。与多台计算机不同的是多核处理器的所有处理器核心可以使用同一条总线访问存储器,因此它们可以共用同一片内存;它们也可能享用同一套片上设备。嵌入式系统中不仅操作系统及驱动程序,包括应用程序也会经常使用到共享内存、硬件寄存器等资源。而多核处理器使用共享资源往往需要独占地使用,例如一块共享内存,如果两个处理器核心同时写入就可能造成冲突,使结果变得不可控。
为了解决这种冲突,出现了用来保护资源访问的机制,即自旋锁。自旋锁是专为防止多处理器并发而引入的一种锁,它在内核中大量应用于中断处理等部分(对于单处理器来说,防止中断处理中的并发可简单采用关闭中断的方式,不需要自旋锁)。自旋锁最多只能被一个内核任务持有,如果一个内核任务试图请求一个已经被持有的自旋锁,那么这个任务就会一直进行忙循环-旋转,等待锁重新可用。要是锁未被持有,请求它的内核任务便能立刻得该自旋锁并进行使用。一般自旋锁的锁值为零值时为未被持有状态,为非零值时则该自旋锁已经被持有。自旋锁可以在任何时刻防止多于一个的内核任务同时进入临界区,因此这种锁可有效地避免多处理器上并发运行的内核任务竞争共享资源。
但是使用自旋锁的过程中,如果程序产生错误,有可能使得某个处理器核心对自旋锁加锁后没有进行解锁,那么这时候任何处理器核心试图再去取锁时都会进入等待的状态,因无人解锁而长期等待陷入瘫痪。由于多核系统中自旋锁应用非常广泛,所以自旋锁死锁问题会经常出现,长期困扰开发者。
目前的嵌入式应用系统中,自旋锁的死锁问题一般通过任务死锁检测机制来定位,例如看门狗复位系统。通过挂死任务的状态信息可以得知哪一处代码取锁失败导致的系统挂死。但是无法得知那一部分软件代码加锁未释放导致当前代码取锁失败,因此检测不到错误的位置,需要工作人员编写代码调试,利用各种实验室手段进行定位,不仅浪费人力物力还往往会拖延调试周期。
发明内容
本发明实施例所要解决的技术问题在于,提供一种自旋锁的加锁方法及计算机系统,能够在自旋锁发生死锁时快速查找到出错位置。
本发明实施例提供了自旋锁的加锁方法,该方法包括:
检测到自旋锁为未被持有状态,内核任务获取所述自旋锁,并将所述内核任务的程序代码标识写入锁值存储区,所述锁值存储区用于存储自旋锁的锁值。
本发明实施例还提供了一种自旋锁的加锁装置,包括
锁值存储区,用于存储所述自旋锁锁值;
检测单元,用于检测所述自旋锁的状态;
第一编写单元,用于在所述检测单元检测到所述自旋锁的状态为未被持有状态时,将所述内核任务的程序代码标识写入锁值存储区。
本发明实施例还提供一种计算机系统,包括多核处理器、存储器以及计算机总线,所述存储器包含用于表示所述自旋锁锁值的锁值存储区,该计算机系统还包括:
检测单元,用于检测所述自旋锁的状态;
第一编写单元,用于在所述检测单元检测到所述自旋锁的状态为未被持有状态时,将所述内核任务的程序代码标识写入锁值存储区。
本发明实施例在锁值存储区中写入内核任务的程序代码标识,由于程序代码标识能够指示获取自旋锁的内核任务,在自旋锁死锁时根据锁值存储区中的信息能够对出错的位置进行快速的定位,在占用系统较小开销的情况下能够较大的缩短了调试周期。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明自旋锁的加锁方法的第一实施例流程图;
图2是本发明自旋锁的加锁方法的第二实施例流程图;
图3是本发明计算机系统的一实施例的结构示意图;
图4是本发明计算机系统的另一实施例的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参见图1所示,图1是本发明自旋锁的加锁方法的第一实施例流程图。如图1所示,该方法具体包括:
步骤S101,检查自旋锁的当前锁值,并判断该自旋锁是否为已被持有状态。自旋锁的状态根据锁值的数值来判断,在本实施例中自旋锁的锁值存储在锁值存储区中,如果自旋锁的当前锁值为非零值,那么系统判断该自旋锁为已被持有状态;如果自旋锁的当前锁值为零值,那么系统判断该自旋锁为未被持有状态。如果自旋锁被判断为已被持有状态时,那么试图获取该自旋锁的内核任务就会进行自旋等待,直到该自旋锁被释放为止,即直到该自旋锁变为未被持有状态为止。在自旋锁为未被持有状态时,执行步骤S102。
步骤S102,内核任务获取自旋锁,将所述内核任务的程序代码标识写入锁值存储区。例如在32位的系统中,自旋锁的锁值一般用32位的锁值存储区来表示,这里的32位存储区即为32位内存区,可以将能够有效识别内核任务的程序代码标识写入该存储区,那么在自旋锁发生死锁时,开发者可以根据程序代码标识准确的找到锁定内核任务的加锁代码。自旋锁死锁问题发生后代码被锁死在一个固定的位置,这时可以通过死锁检测机制收集内核任务的状态,可保存的信息一般至少包括通用寄存器的值、处理器状态寄存器的值。一般商用操作系统均带有类似的功能,无操作系统的软件也可借助看门狗中断来实现。本实施例中采用的程序代码标识为代码行号,加锁代码的行号在不同文件间重复的概率极小,也就是说仅凭行号即可以确定加锁代码。在上述32位系统中,可以根据代码文件的长度上限来确定用于表示该代码行号信息的存储区的位数。
基于C语言实现的操作系统或应用软件,只需修改自旋锁的实现方式,使用宏定义加内嵌汇编方式实现。其中代码行号可以使用宏定义直接引用编译器的变量取得。这种定位机制的移植非常简单,与C语言代码的规模无关。例如在内嵌汇编实现自旋锁代码时可以通过读取这样的伪代码:
_asm__volatile_(
“检查锁是否被占用”
“load%1,0x12341234\n”
“把%1中的值写入锁中”
);
以上语句中load为汇编伪指令,用来向寄存器中写入一个立即数的值;%1指定一个通用寄存器,0x12341234是立即数的值。这条语句可以把一个0x12341234立即数写入一个指定的通用寄存器。自旋锁为未被持有状态时,可以把这个寄存器的值写到自旋锁所在的内存中,完成加锁的过程。在使用本实施例时可以读取下列伪代码:
_asm__volatile_(
“检查锁是否被占用”
“load%1,”STR(_LINE_)”\n”
“把%1中的值写入锁中”
);
在C编译器编译代码时,_LINE_会被编译成代码所在行号,STR()宏用来将行号与指令字符串拼接在一起,这样加锁后的锁值即为内核任务的程序代码行号。加锁代码的行号在不同文件间重复的概率极小,那么凭行号即可以确定加锁代码。代码行号可通过立即数写入指令,不必占用额外开销,而且仅代码行数一项就已经是非零值,足以确保锁值为有效的非零值。采用本发明第一实施例的加锁方法,在自旋锁死锁时根据该代码行号可以快速的检测到出错的位置,能够大大缩短导致死锁错误的定位周期。除了代码行号之外,在存储区位数足够的情况下还可以以内核任务的加锁代码的文件名或者其他能够表征该内核任务程序加锁代码的数据信息作为代码标识,由于原理相同,在此不再赘述。
请参见图2所示,图2是本发明自旋锁的加锁方法的第二实施例流程图。如图2所示,该方法具体包括:
步骤S201,检查自旋锁的当前锁值,并判断该自旋锁是否为已被持有状态。如果自旋锁被判断为已被持有状态时,那么试图获取该自旋锁的内核任务就会进行自旋等待,直到该自旋锁被释放为止。如果该自旋锁为未被持有状态,则执行步骤S202。
步骤S202,内核任务获取自旋锁,将所述内核任务的程序代码标识写入锁值存储区。本实施例的步骤S201和步骤S202同图1所示第一实施例的步骤相同。除了代码行号之外,在存储区位数足够的情况下还可以以内核任务的加锁代码的文件名或者其他能够表征该内核任务程序加锁代码的数据信息作为代码标识,由于原理相同,在此不再赘述。
步骤S203,将运行所述内核任务的多核处理器的核心标识写入锁值存储区。本实施例中多核处理器的核心标识采用多核处理器的核心号,用于表示多核处理器核心号的位数可以根据多核处理器的核心个数来确定。通过写入程序代码标识可以在发生自旋锁死锁后快速找到持有该自旋锁的内核任务程序的代码,通过写入多核处理器的核心号可以准确的查找到执行该内核任务程序代码的处理器核心。多核处理器的核心号属于处理器内建信息,一般可通过一个cycle(循环)取到。
步骤S204,将用于定位所述内核任务的自定义信息写入锁值存储区。除了通过写入程序代码标识可以在发生自旋锁死锁后快速找到持有该自旋锁的内核任务程序的代码,通过写入多核处理器的核心号可以准确的查找到执行该内核任务程序代码的处理器核心,还可以根据不同内核任务的特点写入定位内核任务的自定义信息,例如任务的ID(Identity,身份标识)等等。这样可以充分的利用存储区来提供更多的定位信息。
代码行号可以通过编译生成立即数的方法写入,不会在系统运行时的带来额外开销。多核处理器的处理器核心号或任务ID等信息也可通过极小开销取得。当然,代码行号、处理器核心号或任务ID写入的顺序并不唯一,也可以将含有代码行号、多核处理器的核心号以及自定义信息的锁值直接写入存储区。写入多核处理器的核心号和自定义信息与图1所示第一实施例步骤S102中的为代码类似,只是宏定义直接引用的编译器的变量不同,在此不再赘述。采用本发明第二实施例的加锁方法,在自旋锁死锁时根据该代码行号可以快速的检测到出错的位置,能够大大缩短导致死锁错误的定位周期。
请参见图3所示,图3是本发明计算机系统的一实施例的结构示意图。请参见图3所示,该计算机系统包括:多核处理器310、存储器320、计算机总线330、检测单元340以及第一编写单元350。多核处理器310、存储器320、检测单元340以及第一编写单元350通过计算机总线330相连接。
多核处理器310含有多个处理核心,每个处理核心都能单独的运行程序,相当于程序运行在一个独立的处理器上。多核处理器310的所有处理器核心可以使用同一条计算总线330访问存储器320。
存储器320为与多核处理器310相关联的存储设备,本实施例中以内存为例进行详细说明,存储器320包含有锁值存储区,所述锁值存储区用来存储自旋锁的锁值。
检测单元340具体包括:读取模块341和判断模块342。
读取模块341,用于读取的所述自旋锁的当前锁值。
判断模块342,用于根据读取模块341读取的自旋锁的当前锁值判断该自旋锁的状态,如果当前锁值为非零值,则判断为已被持有状态;如果当前锁值为零值,则判断为未被持有状态。
第一编写单元350,用于在检测单元340检测出该自旋锁状态为未被持有状态时,将试图获取该自旋锁的内核任务的程序代码标识写入锁值存储区,完成该自旋锁的加锁过程。锁值存储区位于存储器320中。本实施例中采用的程序代码标识为代码行号,加锁代码的行号在不同文件间重复的概率极小,也就是说仅凭行号即可以确定加锁代码。用于表示该代码行号信息的存储区的位数可以根据代码文件的长度上限来确定。将试图获取该自旋锁的内核任务的代码行号写入锁值存储区时读取下面的伪代码:
_asm__volatile_(
“检查锁是否被占用”
“load%1,”STR(_LINE_)”\n”
“把%1中的值写入锁中”
);
加锁代码的行号在不同文件间重复的概率极小,那么凭行号即可以确定加锁代码。代码行号可通过立即数写入指令,不必占用额外开销,而且仅代码行数一项就已经是非零值,足以确保锁值为有效的非零值。在自旋锁死锁时根据该代码行号可以快速的检测到出错的位置,能够大大缩短导致死锁错误的定位周期。
请参见图4所示,图4为本发明计算机系统的另一实施例的结构示意图。请参见图4所示,该计算机系统包括:多核处理器410、存储器420、计算机总线430、检测单元440、第一编写单元450、第二编写单元460以及第三编写单元470。多核处理器410、存储器420、检测单元440、第一编写单元450、第二编写单元460以及第三编写单元470通过计算机总线430相连接。
多核处理器410含有多个处理核心,每个处理核心都能单独的运行程序,相当于程序运行在一个独立的处理器上。多核处理器410的所有处理器核心可以使用同一条计算总线430访问存储器420。
存储器420为与多核处理器410相关联的存储设备,本实施例中以内存条为例进行详细说明,存储器320包含有锁值存储区,所述锁值存储区用来存储自旋锁锁值。
检测单元440具体包括:读取模块441和判断模块442。
读取模块441,用于在锁值存储区中读取的所述自旋锁的当前锁值。
判断模块442,用于根据读取模块441读取的自旋锁的当前锁值判断该自旋锁的状态,如果当前锁值为非零值,则判断为已被持有状态;如果当前锁值为零值,则判断为未被持有状态。
第一编写单元450,用于在检测单元440检测出该自旋锁状态为未被持有状态时,将试图获取该自旋锁的内核任务的程序代码标识写入锁值存储区,完成该自旋锁的加锁过程。锁值存储区位于存储器420中。
第二编写单元460,将运行所述内核任务的所述多核处理器的核心标识写入锁值存储区。本实施例中多核处理器410的核心标识采用多核处理器的核心号,用于表示多核处理器核心号的位数可以根据多核处理器410的核心个数来确定。在发生自旋锁死锁时,通过写入多核处理器410的核心号可以准确的查找到执行该内核任务程序代码的处理器核心。多核处理器410的核心号属于处理器内建信息,一般可通过一个cycle(循环)取到。
第三编写单元470,用于将用于定位所述内核任务的自定义信息写入锁值存储区。为了有效利用存储器410中用于表示自旋锁锁值的存储区,可以在该存储区写入更多的用于定位获取内核任务的定位信息,还可以根据不同内核任务的特点写入自定义信息,例如软件的版本等等。这样可以充分的利用存储区来提供更多的定位信息。
其中第一编写单元450、第二编写单元460以及第三编写单元470可以如本实施例中按功能分为不同的编写单元,也可以合并为一个或者两个编写单元来实现。
本发明实施例通过在锁值存储区中写入内核任务的程序代码标识,在自旋锁死锁时根据该存储区中的信息能够对出错的位置进行快速的定位,在占用系统较小开销的情况下能够较大的缩短了调试周期。
以上所列举的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。
Claims (13)
1、一种自旋锁的加锁方法,其特征在于,包括:
检测到自旋锁为未被持有状态,内核任务获取所述自旋锁,并将所述内核任务的程序代码标识写入锁值存储区,所述锁值存储区用于存储自旋锁的锁值。
2、如权利要求1所述的自旋锁的加锁方法,其特征在于,所述程序代码标识为代码行号。
3、如权利要求1所述的自旋锁的加锁方法,其特征在于,所述检测到自旋锁为未被持有状态包括:
检查所述自旋锁的当前锁值;
根据所述自旋锁的当前锁值来判断该自旋锁的状态,如果当前锁值为非零值,则判断为已被持有状态。
4、如权利要求1所述的自旋锁的加锁方法,其特征在于,所述检测到自旋锁为未被持有状态,内核任务获取所述自旋锁后还包括:
将运行所述内核任务的多核处理器的核心标识写入锁值存储区。
5、如权利要求4所述的自旋锁的加锁方法,其特征在于,所述多核处理器的核心标识为多核处理器的核心号。
6、如权利要求1所述的自旋锁的加锁方法,其特征在于,所述检测到自旋锁为未被持有状态,内核任务获取所述自旋锁后还包括:
将用于定位所述内核任务的自定义信息写入用于锁值存储区。
7、一种自旋锁的加锁装置,其特征在于,包括:
锁值存储区,用于存储所述自旋锁锁值;
检测单元,用于检测所述自旋锁的状态;
第一编写单元,用于在所述检测单元检测到所述自旋锁的状态为未被持有状态时,将所述内核任务的程序代码标识写入锁值存储区。
8、如权利要求7所述的自旋锁的加锁装置,其特征在于,所述检测单元具体包括:
读取模块,用于读取的所述自旋锁的当前锁值;
判断模块,用于根据所述读取模块读取的自旋锁的当前锁值来判断该自旋锁的状态,如果当前锁值为非零值,则判断为已被持有状态;如果当前锁值为零值,则判断为未被持有状态。
9、如权利要求7所述的自旋锁的加锁装置,其特征在于,还包括:
第二编写单元,用于在所述检测单元检测到所述自旋锁的状态为未被持有状态时,将运行所述内核任务的所述多核处理器的核心标识写入锁值存储区。
10、如权利要求7或8所述的自旋锁的加锁装置,其特征在于,还包括:
第三编写单元,用于在所述检测单元检测到所述自旋锁的状态为未被持有状态时,将用于定位所述内核任务的自定义信息写入锁值存储区。
11、一种计算机系统,包括多核处理器、存储器以及计算机总线,其特征在于,所述存储器包含用于表示所述自旋锁锁值的锁值存储区,该计算机系统还包括:
检测单元,用于检测所述自旋锁的状态;
第一编写单元,用于在所述检测单元检测到所述自旋锁的状态为未被持有状态时,将所述内核任务的程序代码标识写入锁值存储区。
12、如权利要求11所述的计算机系统,其特征在于,还包括:
第二编写单元,用于在所述检测单元检测到所述自旋锁的状态为未被持有状态时,将运行所述内核任务的所述多核处理器的核心标识写入锁值存储区。
13、如权利要求11或12所述的计算机系统,其特征在于,还包括:
第三编写单元,用于在所述检测单元检测到所述自旋锁的状态为未被持有状态时,将用于定位所述内核任务的自定义信息写入锁值存储区。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2008102171057A CN101403979A (zh) | 2008-10-27 | 2008-10-27 | 一种自旋锁的加锁方法及计算机系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2008102171057A CN101403979A (zh) | 2008-10-27 | 2008-10-27 | 一种自旋锁的加锁方法及计算机系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101403979A true CN101403979A (zh) | 2009-04-08 |
Family
ID=40538004
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA2008102171057A Pending CN101403979A (zh) | 2008-10-27 | 2008-10-27 | 一种自旋锁的加锁方法及计算机系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101403979A (zh) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102129391A (zh) * | 2011-03-14 | 2011-07-20 | 华中科技大学 | 一种数据库中自旋锁的实现方法 |
CN102141932A (zh) * | 2010-12-14 | 2011-08-03 | 清华大学 | 大临界区保护方法 |
CN102567275A (zh) * | 2010-12-08 | 2012-07-11 | 中国科学院声学研究所 | 一种多核处理器上多个操作系统间内存访问的方法及系统 |
CN103455468A (zh) * | 2012-11-06 | 2013-12-18 | 深圳信息职业技术学院 | 一种多gpu运算卡及多gpu之间的数据传输方法 |
CN104035829A (zh) * | 2014-05-26 | 2014-09-10 | 汉柏科技有限公司 | 一种调试锁的方法及模块 |
WO2014173364A1 (zh) * | 2013-07-23 | 2014-10-30 | 中兴通讯股份有限公司 | 共享资源访问方法和装置 |
WO2014183510A1 (en) * | 2013-05-17 | 2014-11-20 | Hangzhou H3C Technologies Co., Ltd. | Spinlock resources processing |
CN108959085A (zh) * | 2018-06-25 | 2018-12-07 | 清华大学 | 一种检测内核模块在原子上下文中休眠错误的方法及系统 |
CN110781016A (zh) * | 2019-10-30 | 2020-02-11 | 支付宝(杭州)信息技术有限公司 | 一种数据处理方法、装置、设备及介质 |
CN112947677A (zh) * | 2021-02-05 | 2021-06-11 | 北京深之度科技有限公司 | 一种计时器读取方法、计算设备及可读存储介质 |
CN115934370A (zh) * | 2022-12-23 | 2023-04-07 | 科东(广州)软件科技有限公司 | 自旋锁的获取方法、装置、设备及存储介质 |
CN117112246A (zh) * | 2023-10-24 | 2023-11-24 | 苏州元脑智能科技有限公司 | 自旋锁的控制装置 |
-
2008
- 2008-10-27 CN CNA2008102171057A patent/CN101403979A/zh active Pending
Cited By (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102567275A (zh) * | 2010-12-08 | 2012-07-11 | 中国科学院声学研究所 | 一种多核处理器上多个操作系统间内存访问的方法及系统 |
CN102567275B (zh) * | 2010-12-08 | 2014-01-08 | 中国科学院声学研究所 | 一种多核处理器上多个操作系统间内存访问的方法及系统 |
CN102141932A (zh) * | 2010-12-14 | 2011-08-03 | 清华大学 | 大临界区保护方法 |
CN102141932B (zh) * | 2010-12-14 | 2012-11-14 | 清华大学 | 大临界区保护方法 |
CN102129391A (zh) * | 2011-03-14 | 2011-07-20 | 华中科技大学 | 一种数据库中自旋锁的实现方法 |
CN102129391B (zh) * | 2011-03-14 | 2013-08-28 | 华中科技大学 | 一种数据库中自旋锁的实现方法 |
CN103455468A (zh) * | 2012-11-06 | 2013-12-18 | 深圳信息职业技术学院 | 一种多gpu运算卡及多gpu之间的数据传输方法 |
CN104166587A (zh) * | 2013-05-17 | 2014-11-26 | 杭州华三通信技术有限公司 | 一种临界资源的访问装置和方法 |
WO2014183510A1 (en) * | 2013-05-17 | 2014-11-20 | Hangzhou H3C Technologies Co., Ltd. | Spinlock resources processing |
CN104166587B (zh) * | 2013-05-17 | 2018-11-30 | 新华三技术有限公司 | 一种临界资源的访问装置和方法 |
WO2014173364A1 (zh) * | 2013-07-23 | 2014-10-30 | 中兴通讯股份有限公司 | 共享资源访问方法和装置 |
CN104035829A (zh) * | 2014-05-26 | 2014-09-10 | 汉柏科技有限公司 | 一种调试锁的方法及模块 |
CN104035829B (zh) * | 2014-05-26 | 2018-01-12 | 汉柏科技有限公司 | 一种调试锁的方法及模块 |
CN108959085B (zh) * | 2018-06-25 | 2020-09-01 | 清华大学 | 一种检测内核模块在原子上下文中休眠错误的方法及系统 |
CN108959085A (zh) * | 2018-06-25 | 2018-12-07 | 清华大学 | 一种检测内核模块在原子上下文中休眠错误的方法及系统 |
CN110781016A (zh) * | 2019-10-30 | 2020-02-11 | 支付宝(杭州)信息技术有限公司 | 一种数据处理方法、装置、设备及介质 |
CN110781016B (zh) * | 2019-10-30 | 2021-04-23 | 支付宝(杭州)信息技术有限公司 | 一种数据处理方法、装置、设备及介质 |
CN112947677A (zh) * | 2021-02-05 | 2021-06-11 | 北京深之度科技有限公司 | 一种计时器读取方法、计算设备及可读存储介质 |
CN112947677B (zh) * | 2021-02-05 | 2024-02-27 | 北京深之度科技有限公司 | 一种计时器读取方法、计算设备及可读存储介质 |
CN115934370A (zh) * | 2022-12-23 | 2023-04-07 | 科东(广州)软件科技有限公司 | 自旋锁的获取方法、装置、设备及存储介质 |
CN117112246A (zh) * | 2023-10-24 | 2023-11-24 | 苏州元脑智能科技有限公司 | 自旋锁的控制装置 |
CN117112246B (zh) * | 2023-10-24 | 2024-02-09 | 苏州元脑智能科技有限公司 | 自旋锁的控制装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101403979A (zh) | 一种自旋锁的加锁方法及计算机系统 | |
JP4888272B2 (ja) | ソフトウェアのシミュレーション方法、ソフトウェアのシミュレーションのためのプログラム、及びソフトウェアのシミュレーション装置 | |
US8533681B2 (en) | Atomicity violation detection using access interleaving invariants | |
US8140828B2 (en) | Handling transaction buffer overflow in multiprocessor by re-executing after waiting for peer processors to complete pending transactions and bypassing the buffer | |
CN101814018B (zh) | 事务存储器(tm)系统中的读和写监控属性 | |
CN101308462B (zh) | 管理对共享存储器单元的存储器访问的方法和计算系统 | |
CN105723348A (zh) | 使用事务性存储器检测未授权存储器修改及访问 | |
CN104205064A (zh) | 将程序事件记录事件向运行时间检测事件的变换 | |
US8612944B2 (en) | Code evaluation for in-order processing | |
US9086969B2 (en) | Establishing a useful debugging state for multithreaded computer program | |
TW201224749A (en) | Last branch record indicators for transactional memory | |
CN103999036A (zh) | 在支持事务的计算机体系结构中使用异常进行代码专业化的方法和系统 | |
CN105074671A (zh) | 用于在内核模块和设备驱动程序中检测并发编程错误的方法和系统 | |
CN100349131C (zh) | 一种应用程序故障的定位方法 | |
CN106030532B (zh) | 用于事务存储器程序的软件回放器 | |
CN102103482B (zh) | 自适应优化的比较-交换操作 | |
CN104049947A (zh) | 基于动态重命名的矢量寄存器堆的寄存器重新配置 | |
CN102708054A (zh) | 二进制程序循环写内存安全漏洞的检测方法 | |
CN110825427A (zh) | 一种代码管理方法、装置、服务器及存储介质 | |
CN108959085B (zh) | 一种检测内核模块在原子上下文中休眠错误的方法及系统 | |
CN114461409A (zh) | 一种互斥信号量异常阻塞辅助分析方法、系统及存储介质 | |
CN113742252B (zh) | 一种检测内存乱序的方法及装置 | |
CN111695314A (zh) | 一种多核芯片仿真测试方法及装置 | |
Floridia et al. | Parallel software-based self-test suite for multi-core system-on-chip: Migration from single-core to multi-core automotive microcontrollers | |
US11693725B2 (en) | Detecting execution hazards in offloaded operations |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20090408 |