CN109189582A - 一种检测信号量超时原因的方法及装置 - Google Patents

一种检测信号量超时原因的方法及装置 Download PDF

Info

Publication number
CN109189582A
CN109189582A CN201810805610.7A CN201810805610A CN109189582A CN 109189582 A CN109189582 A CN 109189582A CN 201810805610 A CN201810805610 A CN 201810805610A CN 109189582 A CN109189582 A CN 109189582A
Authority
CN
China
Prior art keywords
semaphore
task
present application
time
successful
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
CN201810805610.7A
Other languages
English (en)
Other versions
CN109189582B (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.)
New H3C Technologies Co Ltd Hefei Branch
Original Assignee
New H3C Technologies Co Ltd Hefei Branch
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 New H3C Technologies Co Ltd Hefei Branch filed Critical New H3C Technologies Co Ltd Hefei Branch
Priority to CN201810805610.7A priority Critical patent/CN109189582B/zh
Publication of CN109189582A publication Critical patent/CN109189582A/zh
Application granted granted Critical
Publication of CN109189582B publication Critical patent/CN109189582B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/524Deadlock detection or avoidance

Abstract

本申请提供了一种检测信号量超时原因的方法和装置,该方法包括:记录每一信号量以及对该信号量进行通过操作成功的任务以及所述进行通过操作成功的时间戳;记录每一任务以及该任务当前申请的信号量;从记录的信号量中,获取时间戳至当前时间的时长超过预设超时阈值的超时信号量;依据所述超时信号量、记录的对信号量进行通过操作成功的任务以及任务当前申请的信号量,获取信号量超时原因。可以有效提升任务访问效率。

Description

一种检测信号量超时原因的方法及装置
技术领域
本申请涉及检测技术领域,具体而言,涉及一种检测信号量超时原因的方法及装置。
背景技术
在网络设备的计算机操作系统中,很多情况下需要保障任务独自访问共享资源或临界区域等资源,以避免任务间冲突和不确定交互导致的潜在技术问题。但在同一时间,计算机操作系统中可能存在多个任务同时访问这些资源的情形,为了实现某一任务对该资源的独占式访问,可以通过引入信号量(Semaphore)提供互斥访问,使得在任一时刻,只能由一个任务占用用以表征共享资源或临界区域的信号量,从而实现一共享资源或临界区域在同一时刻,只有一个任务可以访问,用以避免任务间的冲突和不确定交互。
信号量利用通过释放(PV,Passeren Vrijgeven)操作实现互斥的同步操作。其中,PV操作是执行时不被打断的两个操作系统原语,包括P操作和V操作。P操作是指如果有可用的资源,则任务占用该资源,否则,任务被阻塞,直到重新给该任务分配资源;V操作是指如果在信号量的等待队列中有任务在等待该信号量释放的资源,则唤醒等待队列中的一个任务占用该资源,否则,释放该信号量释放的资源。
目前利用信号量实现互斥的方法,虽可有效避免任务间的冲突和不确定交互,但如果一任务长时间占用某信号量引起信号量超时,则其他申请该信号量的任务都要被挂住在等待队列中,使得其他任务长时间不能访问该信号量表征的资源,导致任务访问效率较低。因而,需要提供一种检测方法,对信号量超时进行检测并分析其超时原因,以便于技术人员进行相应处理。
发明内容
有鉴于此,本申请的目的在于提供一种检测信号量超时原因的方法和装置,用于解决现有技术中信号量超时导致任务访问效率较低的问题。
第一方面,本申请实施例提供了一种检测信号量超时原因的方法,应用于计算机操作系统,该方法包括:
记录每一信号量以及对该信号量进行通过操作成功的任务以及所述进行通过操作成功的时间戳;
记录每一任务以及该任务当前申请的信号量;
从记录的信号量中,获取时间戳至当前时间的时长超过预设超时阈值的超时信号量;
依据所述超时信号量、记录的对信号量进行通过操作成功的任务以及任务当前申请的信号量,获取信号量超时原因。
可选地,在记录对该信号量进行通过操作成功的任务以及所述进行通过操作成功的时间戳之后,所述方法还包括:
将信号量、对该信号量进行通过操作成功的任务以及所述进行通过操作成功的时间戳,写入预先设置的以信号量为索引的信号量表中;
在所述记录每一任务以及该任务当前申请的信号量之后,所述方法还包括:
将任务以及该任务当前申请的信号量写入预先设置的以任务为索引的任务表中。
可选地,所述依据所述超时信号量、记录的对信号量进行通过操作成功的任务以及任务当前申请的信号量,获取信号量超时原因,包括:
从所述信号量表中,提取对所述超时信号量中的第一信号量进行通过操作成功的第一任务;
依据所述第一任务查询所述任务表,若所述第一任务当前申请的第二信号量为空,确认所述第一信号量的超时原因为所述第一任务超时。
可选地,所述方法还包括:
若所述第一任务当前申请的第二信号量不为空,将所述第二信号量写入预先构建的包含所述第一信号量的第一资源链路中;
判断所述第一资源链路中依次写入的各信号量是否形成环路,若否,执行从所述信号量表中,提取对所述第二信号量进行通过操作成功的第二任务的步骤,若是,确认所述第一信号量的超时原因为信号量死锁。
可选地,在所述确认所述第一信号量的超时原因为所述第一任务超时之后,所述方法还包括:
记录所述第一任务的任务调用栈以及所述第一任务的上下文信息;
在所述确认所述第一信号量的超时原因为信号量死锁之后,所述方法还包括:
记录形成环路的信号量、占用该信号量的任务、所述占用该信号量的任务的任务调用栈以及所述占用该信号量的任务的上下文信息。
第二方面,本申请实施例提供了一种检测信号量超时原因的装置,该装置包括:
第一记录模块,用于记录对每一信号量进行通过操作成功的任务以及所述进行通过操作成功的时间戳;
第二记录模块,用于记录每一任务当前申请的信号量;
超时获取模块,用于获取时间戳至当前时间的时长超过预设超时阈值的超时信号量;
超时原因检测模块,用于依据所述超时信号量、记录的所述对每一信号量进行通过操作成功的任务以及所述每一任务当前申请的信号量,获取信号量超时原因。
可选地,所述第一记录模块具体用于将信号量、对该信号量进行通过操作成功的任务以及所述进行通过操作成功的时间戳,写入预先设置的以信号量为索引的信号量表中;
所述第二记录模块具体用于将任务以及该任务当前申请的信号量写入预先设置的以任务为索引的任务表中。
可选地,所述超时原因检测模块具体用于:
从所述信号量表中,提取对所述超时信号量中的第一信号量进行通过操作成功的第一任务;
依据所述第一任务查询所述任务表,若所述第一任务当前申请的第二信号量为空,确认所述第一信号量的超时原因为所述第一任务超时。
可选地,所述超时原因检测模块具体还用于:
若所述第一任务当前申请的第二信号量不为空,将所述第二信号量写入预先构建的包含所述第一信号量的第一资源链路中;
判断所述第一资源链路中依次写入的各信号量是否形成环路,若否,执行从所述信号量表中,提取对所述第二信号量进行通过操作成功的第二任务的步骤,若是,确认所述第一信号量的超时原因为信号量死锁。
可选地,所述装置还包括:
任务超时信息存储模块,用于记录所述第一任务的任务调用栈以及所述第一任务的上下文信息;
信号量死锁信息存储模块,用于记录形成环路的信号量、占用该信号量的任务、所述占用该信号量的任务的任务调用栈以及所述占用该信号量的任务的上下文信息。
第三方面,本申请实施例提供了一种计算机设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述方法的步骤。
第四方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行上述的方法的步骤。
本申请实施例提供的一种检测信号量超时原因的方法,通过记录每一信号量以及对该信号量进行通过操作成功的任务以及所述进行通过操作成功的时间戳;记录每一任务以及该任务当前申请的信号量;从记录的信号量中,获取时间戳至当前时间的时长超过预设超时阈值的超时信号量;依据所述超时信号量、记录的对信号量进行通过操作成功的任务以及任务当前申请的信号量,获取信号量超时原因。这样,由于对信号量超时进行检测并分析其超时原因,可以避免信号量超时导致其他申请该信号量的任务不能访问该信号量表征的资源,从而能够有效提升任务访问效率。
为使本申请的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的检测信号量超时原因的方法流程示意图;
图2为本申请实施例提供的检测信号量超时原因的方法另一流程示意图;
图3为本申请实施例提供的检测信号量超时原因的装置结构示意图;
图4为本申请实施例提供的一种计算机设备400的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
图1为本申请实施例提供的检测信号量超时原因的方法流程示意图。如图1所示,该方法应用于计算机操作系统,该方法包括:
步骤101,记录每一信号量以及对该信号量进行通过操作成功的任务以及所述进行通过操作成功的时间戳;
本申请实施例中,对于每一信号量,分别记录当前对该信号量进行P操作成功的任务以及P操作成功时的时间戳。
本申请实施例中,为了便于对记录的任务及时间戳进行有效管理,作为一可选实施例,在记录对信号量进行通过操作成功的任务以及所述进行通过操作成功的时间戳之后,该方法还包括:
将信号量、对该信号量进行通过操作成功的任务以及所述进行通过操作成功的时间戳,写入预先设置的以信号量为索引的信号量表中。
本申请实施例中,对该信号量进行通过操作成功的任务可以简称为该信号量对应的任务。作为一可选实施例,信号量表包括但不限于:信号量数组表、信号量链表、信号量表格等。优选地,信号量表为信号量链表。其中,以信号量为索引可以是以该信号量名称为索引,或者,以该信号量标识为索引,或者,以该信号量序列号为索引等,本申请实施例对此不作限定。
本申请实施例中,作为一可选实施例,以三个信号量为例,信号量链表可以表示如下:
{{SemA,Task1,Time1},{SemB,Task2,Time2},{SemC,Task3,Time3}}
其中,
SemA、SemB、SemC为三个信号量。Task1为占用SemA的任务,Time1为Task1占用SemA成功时的时间戳。Task2为占用SemB的任务,Time2为Task2占用SemB成功时的时间戳。Task3为占用SemC的任务,Time3为Task3占用SemC成功时的时间戳。
本申请实施例中,也可以是预先构建以信号量为索引的信号量链表,在构建的信号量链表中,各信号量对应的任务以及时间戳为空。在一任务对一信号量进行P操作成功后,将该任务以及时间戳记录至信号量链表中该信号量对应的位置。
步骤102,记录每一任务以及该任务当前申请的信号量;
本申请实施例中,对于每一任务,分别记录该任务当前申请的信号量,即该任务的待申请信号量。如果该任务当前没有申请的信号量,则可以记录该任务当前申请的信号量为空。
本申请实施例中,作为一可选实施例,在所述记录每一任务以及该任务当前申请的信号量之后,该方法还包括:
将任务以及该任务当前申请的信号量写入预先设置的以任务为索引的任务表中。
本申请实施例中,任务表包括但不限于:任务数组表、任务链表、任务表格等。优选地,任务表为任务链表。
本申请实施例中,以任务为索引可以是以该任务名称为索引,或者,以该任务标识为索引,或者,以该任务序列号为索引等。
本申请实施例中,作为一可选实施例,以三个任务为例,任务链表可以表示如下:
{{Task1,Sem1},{Task2,Sem2},{Task3,Null}}
其中,
Sem1为Task1当前申请的信号量。Sem2为Task2当前申请的信号量,Task3当前没有申请信号量,为空。
本申请实施例中,也可以将任务当前申请的时间戳写入任务表中,以在后续中,可以依据该时间戳与当前时间确定该任务申请该信号量的时长,从而确定是否需要撤销对该信号量的申请。
本申请实施例中,也可以是预先构建以任务为索引的任务链表,在构建的任务链表中,各任务对应的信号量为空。在一任务对一信号量进行P操作成功后,获取该任务当前申请的信号量,即获取该任务对应的待申请信号量,记录至任务链表中该任务对应的位置。从而可以记录任务当前是否正在申请(等待)信号量,以及,申请(等待)的是哪个信号量。
本申请实施例中,通过双链表方式分别记录信号量和占用该信号量的任务,以及,任务和该任务正在申请的信号量。可以便于后续快速进行信号量超时原因分析。
作为一可选实施例,也可以将信号量链表和任务链表合并在一个链表中。
步骤103,从记录的信号量中,获取时间戳至当前时间的时长超过预设超时阈值的超时信号量;
本申请实施例中,作为一可选实施例,可以是按照预设的超时检测周期,对信号量链表进行遍历检测,以获取时间戳至当前时间的时长超过预设超时阈值的超时信号量。作为另一可选实施例,也可以是不定时对信号量链表进行遍历检测,以获取时间戳至当前时间的时长超过预设超时阈值的超时信号量。
本申请实施例中,如果信号量链表中某一信号量对应的时间戳至当前时间的时长超过预设超时阈值,确定该信号量超时,该信号量为超时信号量。
本申请实施例中,作为一可选实施例,可以针对不同的信号量,设置相应的超时阈值,构建各信号量与超时阈值的映射关系,在进行超时检测时,通过获取一信号量的时间戳至当前时间的时长,再从映射关系中获取该信号量的超时阈值,从而确定该信号量是否为超时信号量。
步骤104,依据所述超时信号量、记录的对信号量进行通过操作成功的任务以及任务当前申请的信号量,获取信号量超时原因。
本申请实施例中,如前所述,如果采用信号量链表记录信号量、信号量对应的任务以及时间戳,采用任务链表记录任务及任务当前申请的信号量,则依据所述超时信号量、所述任务链表以及所述信号量链表,获取信号量超时原因。
本申请实施例中,作为一可选实施例,所述依据所述超时信号量、记录的对信号量进行通过操作成功的任务以及任务当前申请的信号量,获取信号量超时原因,包括:
A11,从所述信号量链表中,提取对所述超时信号量中的第一信号量进行通过操作成功的第一任务;
本申请实施例中,从获取的多个超时信号量中,针对每一超时信号量,提取对该信号量进行P操作成功的任务,得到该信号量对应的任务。
本申请实施例中,第一信号量为泛指。
A12,依据所述第一任务查询所述任务链表,若所述第一任务当前申请的第二信号量为空,确认所述第一信号量的超时原因为所述第一任务超时。
本申请实施例中,在任务链表中,若某一任务当前申请的信号量为空,表明该任务正在执行某一操作,当前没有申请信号量,即该任务当前不处于信号量等待状态。例如,以任务为第一任务写入数据为例,若第一任务当前申请的第二信号量为空,表明第一任务通过占用第一信号量,正向第一信号量表征的共享资源或临界区域写入数据,该第一任务为占时长的任务,需要后续进行优化分析,以避免执行操作超时影响其他任务的操作。
本申请实施例中,依据与第一信号量相同的处理方式,可以确定超时信号量中的其他信号量的超时原因是否为对应任务超时。
本申请实施例中,为了便于后续对超时原因进行具体分析以解决信号量超时的技术问题,作为一可选实施例,在所述确认所述第一信号量的超时原因为所述第一任务超时之后,该方法还包括:
记录所述第一任务的任务调用栈以及所述第一任务的上下文信息。
本申请实施例中,作为一可选实施例,第一任务的任务调用栈包括:所述第一任务正在执行的函数以及调用所述正在执行的函数的函数等。第一任务的上下文信息包括:所述第一任务、所述第一任务占用的第二信号量、所述第一任务执行的操作、当前时间等。
本申请实施例中,作为一可选实施例,该方法还包括:
B11,若所述第一任务当前申请的第二信号量不为空,将所述第二信号量写入预先构建的包含所述第一信号量的第一资源链路中;
B12,判断所述第一资源链路中依次写入的各信号量是否形成环路,若否,返回执行步骤A11,若是,确认所述第一信号量的超时原因为信号量死锁。
本申请实施例中,若第一资源链路未形成环路,从所述信号量链表中,提取所述第二信号量对应的第二任务,再从所述任务链表中获取第二任务当前申请的第三信号量,判断当前申请的第三信号量是否为空,并依据判断结果执行相应操作。例如,若当前申请的第三信号量为空,确认所述第一信号量的超时原因为等待所述第二任务超时。若当前申请的第三信号量不为空,则将第三信号量写入包含第一信号量以及第二信号量的第一资源链路中;若第一资源链路形成环路,确认所述第一信号量的超时原因为信号量死锁,若第一资源链路未形成环路,则从所述信号量链表中,提取所述第三信号量对应的第三任务,直至确定第一信号量的超时原因为信号量死锁或等待其它任务超时为止。
本申请实施例中,举例来说,如果:
Task1占用了SemA,正在申请SemB;
Task2占用了SemB,正在申请SemC;
Task3占用了SemC,正在执行某占时很长的操作;
则信号量链表为:
{{SemA,Task1,Time1},{SemB,Task2,Time2},{SemC,Task3,Time3}}
任务链表为:
{{Task1,SemB},{Task2,SemC},{Task3,Null}}
如果SemA的时间戳至当前时间的时长超过预设超时阈值,则在信号量链表中,根据{SemA,Task1,Time1}查找到Task1,在任务链表中,依据Task1查找得到{Task1,SemB},表明Task1处于信号量等待状态,对应的等待(申请的)信号量为SemB(不为空),第一资源链路为{SemA,SemB},未形成环路;再从信号量链表中,依据SemB查找得到{SemB,Task2},再在任务链表中,依据Task2查找得到{Task2,SemC},表明Task2处于信号量等待状态,对应信号量为SemC(不为空),更新第一资源链路为{SemA,SemB,SemC},未形成环路;再接下来,在信号量链表中,依据SemC查找得到{SemC,Task3},再在任务链表中,依据Task3查找得到{Task3,Null},表明Task3未处于信号量等待状态,说明SemA的超时是由于等待其他信号量造成的。
如果SemC的时间戳至当前时间的时长超过预设超时阈值,则在信号量链表中,根据{SemC,Task3,Time3}查找到Task3,在任务链表中,依据Task3查找得到{Task3,Null},表明Task3未处于信号量等待状态,表明SemC的超时的原因是由于Task3超时。
再例如,如果:
Task1占用了SemA,正在申请SemB;
Task2占用了SemB,正在申请SemC;
Task3占用了SemC,正在申请SemA;
则信号量链表为:
{{SemA,Task1,Time1},{SemB,Task2,Time2},{SemC,Task3,Time3}}
任务链表为:
{{Task1,SemB},{Task2,SemC},{Task3,SemA}}
如果SemA超时,根据与上述相同的处理流程,最后得到的更新的第一资源链路为{SemA,SemB,SemC,SemA},从而形成环路,说明构成了信号量死锁。
本申请实施例中,作为一可选实施例,判断所述第一资源链路中各信号量是否形成环路,可以包括:判断第一资源链路中的各信号量是否具有两个或两个以上相同的信号量,如果是,确定形成环路,如果否,确定未形成环路。
本申请实施例中,作为一可选实施例,在所述确认所述第一信号量的超时原因为信号量死锁之后,该方法还包括:
记录形成环路的信号量、占用该信号量的任务、所述占用该信号量的任务的任务调用栈以及所述占用该信号量的任务的上下文信息。
本申请实施例中,通过记录上述相关信息,可以为技术人员提供信号量超时的具体原因,从而便于技术人员依据该具体原因,及时对信号量超时进行处理,以保障其他任务访问该信号量的访问效率。
本申请实施例中,该方法还包括:
当对信号量进行释放操作成功后,清除记录的对该信号量进行通过操作成功的任务以及所述进行通过操作成功的时间戳。
当任务对申请的信号量进行通过操作成功后,清除记录的该任务当前申请的信号量。
本申请实施例中,在以信号量为索引的信号量链表中,对每个信号量,记录当前P操作成功的任务,即记录每个信号量当前被哪个任务所占用。当V操作成功后,则清除该记录。
本申请实施例提供的检测信号量超时原因的方法,通过记录对每一信号量进行通过操作成功的任务以及所述进行通过操作成功的时间戳;记录每一任务当前申请的信号量;获取时间戳至当前时间的时长超过预设超时阈值的超时信号量;依据所述超时信号量、记录的所述对每一信号量进行通过操作成功的任务以及所述每一任务当前申请的信号量,获取信号量超时原因。可以快捷检测到引起信号量超时的原因,确定超时原因是任务超时引起还是信号量死锁引起,从而为技术人员提供信号量超时的具体原因,能够为系统优化提供准确的数据,对网络设备的优化处理和问题定位提供重要帮助,便于技术人员依据该具体原因进行及时处理,解决任务长时间占用信号量引起的信号量超时问题,使得其他任务能够访问该信号量表征的资源,提升了任务访问效率。
图2为本申请实施例提供的检测信号量超时原因的方法另一流程示意图。如图2所示,该流程包括:
步骤201,获取对每一信号量进行通过操作成功的任务以及所述进行通过操作成功的时间戳,写入预先设置的以信号量为索引的信号量链表中;
本申请实施例中,可以是针对每一信号量,将对信号量进行通过操作成功的任务以及进行通过操作成功的时间戳,写入信号量链表中。
步骤202,获取每一任务当前申请的信号量,写入预先设置的以任务为索引的任务链表中;
本申请实施例中,任务链表用于存储任务以及该任务当前申请的信号量。
步骤203,获取时间戳至当前时间的时长超过预设超时阈值的超时信号量;
本申请实施例中,设置各信号量的超时阈值均相同。
步骤204,从超时信号量中,提取第一信号量;
步骤205,从信号量链表中,获取第一信号量对应的第一任务;
本申请实施例中,信号量链表中的第一信号量与第一任务具有对应关系。
步骤206,查询任务链表,获取第一任务对应的第二信号量,判断第二信号量是否为空,若是,执行步骤207,若否,执行步骤209;
本申请实施例中,判断第一任务是否正在申请第二信号量,若正在申请,第二信号量不为空,若未申请,第二信号量为空。
步骤207,确认第一信号量的超时原因为第一任务超时;
步骤208,判断超时信号量是否提取完毕,如果是,结束流程,如果否,返回执行步骤204;
本申请实施例中,需要对超时信号量中的每一超时信号量进行超时原因分析。
步骤209,将第二信号量写入包含第一信号量的第一资源链路中;
步骤210,判断第一资源链路中的各信号量是否形成环路,若是,执行步骤211,若否,返回执行步骤205;
本申请实施例中,如果第一信号量与第二信号量相同,表明第一资源链路形成环路。
步骤211,确认第一信号量的超时原因为信号量死锁,返回执行步骤208。
图3为本申请实施例提供的检测信号量超时原因的装置结构示意图。如图3所示,该装置包括:
第一记录模块301,用于记录对每一信号量进行通过操作成功的任务以及所述进行通过操作成功的时间戳;
本申请实施例中,对于每一信号量,分别记录当前对该信号量进行P操作成功的任务以及P操作成功时的时间戳。
第二记录模块302,用于记录每一任务当前申请的信号量;
超时获取模块303,用于获取时间戳至当前时间的时长超过预设超时阈值的超时信号量;
本申请实施例中,作为一可选实施例,可以是按照预设的超时检测周期,对信号量链表进行遍历检测,以获取时间戳至当前时间的时长超过预设超时阈值的超时信号量。作为另一可选实施例,也可以是不定时对信号量链表进行遍历检测,以获取时间戳至当前时间的时长超过预设超时阈值的超时信号量。
超时原因检测模块304,用于依据所述超时信号量、记录的所述对每一信号量进行通过操作成功的任务以及所述每一任务当前申请的信号量,获取信号量超时原因。
本申请实施例中,作为一可选实施例,第一记录模块301具体用于将信号量、对该信号量进行通过操作成功的任务以及所述进行通过操作成功的时间戳,写入预先设置的以信号量为索引的信号量表中;
第二记录模块302具体用于将任务以及该任务当前申请的信号量写入预先设置的以任务为索引的任务表中。
本申请实施例中,作为一可选实施例,信号量表包括但不限于:信号量数组表、信号量链表、信号量表格等。优选地,信号量表为信号量链表。任务表包括但不限于:任务数组表、任务链表、任务表格等。优选地,任务表为任务链表。
本申请实施例中,作为一可选实施例,超时原因检测模块304具体用于:
从所述信号量表中,提取对所述超时信号量中的第一信号量进行通过操作成功的第一任务;
依据所述第一任务查询所述任务表,若所述第一任务当前申请的第二信号量为空,确认所述第一信号量的超时原因为所述第一任务超时。
本申请实施例中,作为一可选实施例,超时原因检测模块304具体还用于:
若所述第一任务当前申请的第二信号量不为空,将所述第二信号量写入预先构建的包含所述第一信号量的第一资源链路中;
判断所述第一资源链路中依次写入的各信号量是否形成环路,若否,执行从所述信号量表中,提取对所述第二信号量进行通过操作成功的第二任务的步骤,若是,确认所述第一信号量的超时原因为信号量死锁。
本申请实施例中,作为一可选实施例,该装置还包括:
任务超时信息存储模块(图中未示出),用于记录所述第一任务的任务调用栈以及所述第一任务的上下文信息;
信号量死锁信息存储模块(图中未示出),用于记录形成环路的信号量、占用该信号量的任务、所述占用该信号量的任务的任务调用栈以及所述占用该信号量的任务的上下文信息。
本申请实施例中,作为一可选实施例,第一任务的任务调用栈包括:所述第一任务正在执行的函数以及调用所述正在执行的函数的函数等。第一任务的上下文信息包括:所述第一任务、所述第一任务占用的第二信号量、所述第一任务执行的操作、当前时间等。
本申请实施例中,作为一可选实施例,该装置还包括:
更新模块(图中未示出),用于当对信号量进行释放操作成功后,清除记录的对该信号量进行通过操作成功的任务以及所述进行通过操作成功的时间戳;
当任务对申请的信号量进行通过操作成功后,清除记录的该任务当前申请的信号量。
本申请实施例中,在以信号量为索引的信号量链表中,对每个信号量,记录当前P操作成功的任务,即记录每个信号量当前被哪个任务所占用。当V操作成功后,则清除该记录。
如图4所示,本申请一实施例提供了一种计算机设备400,用于执行图1和图2中的检测信号量超时原因的方法,该设备包括存储器401、处理器402及存储在该存储器401上并可在该处理器402上运行的计算机程序,其中,上述处理器402执行上述计算机程序时实现上述检测信号量超时原因的方法的步骤。
具体地,上述存储器401和处理器402能够为通用的存储器和处理器,这里不做具体限定,当处理器402运行存储器401存储的计算机程序时,能够执行上述检测信号量超时原因的方法,用于解决现有技术中任务访问效率较低的问题,本申请通过记录对每一信号量进行通过操作成功的任务以及所述进行通过操作成功的时间戳;记录每一任务当前申请的信号量;获取时间戳至当前时间的时长超过预设超时阈值的超时信号量;依据所述超时信号量、记录的所述对每一信号量进行通过操作成功的任务以及所述每一任务当前申请的信号量,获取信号量超时原因。这样,由于对信号量超时进行检测并分析其超时原因,可以避免信号量超时导致其他申请该信号量的任务不能访问该信号量表征的资源,从而能够有效提升任务访问效率。
对应于图1和图2中的检测信号量超时原因的方法,本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述检测信号量超时原因的方法的步骤。
具体地,该存储介质能够为通用的存储介质,如移动磁盘、硬盘等,该存储介质上的计算机程序被运行时,能够执行上述检测信号量超时原因的方法,用于解决现有技术中任务访问效率较低的问题,本申请通过记录对每一信号量进行通过操作成功的任务以及所述进行通过操作成功的时间戳;记录每一任务当前申请的信号量;获取时间戳至当前时间的时长超过预设超时阈值的超时信号量;依据所述超时信号量、记录的所述对每一信号量进行通过操作成功的任务以及所述每一任务当前申请的信号量,获取信号量超时原因。这样,由于对信号量超时进行检测并分析其超时原因,可以避免信号量超时导致其他申请该信号量的任务不能访问该信号量表征的资源,从而能够有效提升任务访问效率。
在本申请所提供的实施例中,应该理解到,所揭露装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请提供的实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释,此外,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
最后应说明的是:以上所述实施例,仅为本申请的具体实施方式,用以说明本申请的技术方案,而非对其限制,本申请的保护范围并不局限于此,尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本申请实施例技术方案的精神和范围。都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。

Claims (10)

1.一种检测信号量超时原因的方法,其特征在于,应用于计算机操作系统,该方法包括:
记录每一信号量以及对该信号量进行通过操作成功的任务和所述进行通过操作成功的时间戳;
记录每一任务以及该任务当前申请的信号量;
从记录的信号量中,获取时间戳至当前时间的时长超过预设超时阈值的超时信号量;
依据所述超时信号量、记录的对信号量进行通过操作成功的任务以及任务当前申请的信号量,获取信号量超时原因。
2.如权利要求1所述的方法,其特征在于,在记录对该信号量进行通过操作成功的任务以及所述进行通过操作成功的时间戳之后,所述方法还包括:
将信号量、对该信号量进行通过操作成功的任务以及所述进行通过操作成功的时间戳,写入预先设置的以信号量为索引的信号量表中;
在所述记录每一任务以及该任务当前申请的信号量之后,所述方法还包括:
将任务以及该任务当前申请的信号量写入预先设置的以任务为索引的任务表中。
3.如权利要求2所述的方法,其特征在于,所述依据所述超时信号量、记录的对信号量进行通过操作成功的任务以及任务当前申请的信号量,获取信号量超时原因,包括:
从所述信号量表中,提取对所述超时信号量中的第一信号量进行通过操作成功的第一任务;
依据所述第一任务查询所述任务表,若所述第一任务当前申请的第二信号量为空,确认所述第一信号量的超时原因为所述第一任务超时。
4.如权利要求3所述的方法,其特征在于,所述方法还包括:
若所述第一任务当前申请的第二信号量不为空,将所述第二信号量写入预先构建的包含所述第一信号量的第一资源链路中;
判断所述第一资源链路中依次写入的各信号量是否形成环路,若否,执行从所述信号量表中,提取对所述第二信号量进行通过操作成功的第二任务的步骤,若是,确认所述第一信号量的超时原因为信号量死锁。
5.如权利要求4所述的方法,其特征在于,在所述确认所述第一信号量的超时原因为所述第一任务超时之后,所述方法还包括:
记录所述第一任务的任务调用栈以及所述第一任务的上下文信息;
在所述确认所述第一信号量的超时原因为信号量死锁之后,所述方法还包括:
记录形成环路的信号量、占用该信号量的任务、所述占用该信号量的任务的任务调用栈以及所述占用该信号量的任务的上下文信息。
6.一种检测信号量超时原因的装置,其特征在于,该装置包括:
第一记录模块,用于记录对每一信号量进行通过操作成功的任务以及所述进行通过操作成功的时间戳;
第二记录模块,用于记录每一任务当前申请的信号量;
超时获取模块,用于获取时间戳至当前时间的时长超过预设超时阈值的超时信号量;
超时原因检测模块,用于依据所述超时信号量、记录的所述对每一信号量进行通过操作成功的任务以及所述每一任务当前申请的信号量,获取信号量超时原因。
7.如权利要求6所述的装置,其特征在于,所述第一记录模块具体用于将信号量、对该信号量进行通过操作成功的任务以及所述进行通过操作成功的时间戳,写入预先设置的以信号量为索引的信号量表中;
所述第二记录模块具体用于将任务以及该任务当前申请的信号量写入预先设置的以任务为索引的任务表中。
8.如权利要求7所述的装置,其特征在于,所述超时原因检测模块具体用于:
从所述信号量表中,提取对所述超时信号量中的第一信号量进行通过操作成功的第一任务;
依据所述第一任务查询所述任务表,若所述第一任务当前申请的第二信号量为空,确认所述第一信号量的超时原因为所述第一任务超时。
9.如权利要求8所述的装置,其特征在于,所述超时原因检测模块具体还用于:
若所述第一任务当前申请的第二信号量不为空,将所述第二信号量写入预先构建的包含所述第一信号量的第一资源链路中;
判断所述第一资源链路中依次写入的各信号量是否形成环路,若否,执行从所述信号量表中,提取对所述第二信号量进行通过操作成功的第二任务的步骤,若是,确认所述第一信号量的超时原因为信号量死锁。
10.如权利要求9所述的装置,其特征在于,所述装置还包括:
任务超时信息存储模块,用于记录所述第一任务的任务调用栈以及所述第一任务的上下文信息;
信号量死锁信息存储模块,用于记录形成环路的信号量、占用该信号量的任务、所述占用该信号量的任务的任务调用栈以及所述占用该信号量的任务的上下文信息。
CN201810805610.7A 2018-07-20 2018-07-20 一种检测信号量超时原因的方法及装置 Active CN109189582B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810805610.7A CN109189582B (zh) 2018-07-20 2018-07-20 一种检测信号量超时原因的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810805610.7A CN109189582B (zh) 2018-07-20 2018-07-20 一种检测信号量超时原因的方法及装置

Publications (2)

Publication Number Publication Date
CN109189582A true CN109189582A (zh) 2019-01-11
CN109189582B CN109189582B (zh) 2020-09-15

Family

ID=64936911

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810805610.7A Active CN109189582B (zh) 2018-07-20 2018-07-20 一种检测信号量超时原因的方法及装置

Country Status (1)

Country Link
CN (1) CN109189582B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110427272A (zh) * 2019-07-26 2019-11-08 新华三技术有限公司成都分公司 接口函数定位方法、装置及网络设备
CN110554914A (zh) * 2019-07-15 2019-12-10 厦门网宿有限公司 资源锁管理方法、装置、服务器及存储介质
CN111538599A (zh) * 2020-04-23 2020-08-14 杭州涂鸦信息技术有限公司 一种基于linux的多线程死锁问题定位方法及系统
CN115983393A (zh) * 2022-12-30 2023-04-18 北京百度网讯科技有限公司 量子电路任务超时原因确定方法、装置、设备及存储介质

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1831779A (zh) * 2005-03-11 2006-09-13 华为技术有限公司 一种信号量死锁的检测方法
CN102436393A (zh) * 2006-08-24 2012-05-02 科尼龙硅公司 任务处理装置
US20120137295A1 (en) * 2010-11-30 2012-05-31 Alcatel-Lucent Canada Inc. Method for displaying cpu utilization in a multi-processing system
CN103268256A (zh) * 2013-05-31 2013-08-28 迈普通信技术股份有限公司 多任务操作系统中死锁检测方法及装置
CN103455310A (zh) * 2012-05-29 2013-12-18 中兴通讯股份有限公司 信号量等待接口定时方法及装置
CN103455368A (zh) * 2013-08-27 2013-12-18 华为技术有限公司 一种死锁检测方法、节点及系统
CN103761182A (zh) * 2013-12-26 2014-04-30 上海华为技术有限公司 一种死锁检测方法及装置
CN103902356A (zh) * 2012-12-26 2014-07-02 上海斐讯数据通信技术有限公司 一种信号量死锁的检测方法
US20140351825A1 (en) * 2013-05-23 2014-11-27 Kun Xu Systems and methods for direct memory access coherency among multiple processing cores
CN106293884A (zh) * 2015-05-20 2017-01-04 苏州简约纳电子有限公司 一种消息驱动系统中无效超时消息的检测方法

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1831779A (zh) * 2005-03-11 2006-09-13 华为技术有限公司 一种信号量死锁的检测方法
CN102436393A (zh) * 2006-08-24 2012-05-02 科尼龙硅公司 任务处理装置
US20120137295A1 (en) * 2010-11-30 2012-05-31 Alcatel-Lucent Canada Inc. Method for displaying cpu utilization in a multi-processing system
CN103455310A (zh) * 2012-05-29 2013-12-18 中兴通讯股份有限公司 信号量等待接口定时方法及装置
CN103902356A (zh) * 2012-12-26 2014-07-02 上海斐讯数据通信技术有限公司 一种信号量死锁的检测方法
US20140351825A1 (en) * 2013-05-23 2014-11-27 Kun Xu Systems and methods for direct memory access coherency among multiple processing cores
CN103268256A (zh) * 2013-05-31 2013-08-28 迈普通信技术股份有限公司 多任务操作系统中死锁检测方法及装置
CN103455368A (zh) * 2013-08-27 2013-12-18 华为技术有限公司 一种死锁检测方法、节点及系统
CN103761182A (zh) * 2013-12-26 2014-04-30 上海华为技术有限公司 一种死锁检测方法及装置
CN106293884A (zh) * 2015-05-20 2017-01-04 苏州简约纳电子有限公司 一种消息驱动系统中无效超时消息的检测方法

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110554914A (zh) * 2019-07-15 2019-12-10 厦门网宿有限公司 资源锁管理方法、装置、服务器及存储介质
CN110427272A (zh) * 2019-07-26 2019-11-08 新华三技术有限公司成都分公司 接口函数定位方法、装置及网络设备
CN110427272B (zh) * 2019-07-26 2022-07-01 新华三技术有限公司成都分公司 接口函数定位方法、装置及网络设备
CN111538599A (zh) * 2020-04-23 2020-08-14 杭州涂鸦信息技术有限公司 一种基于linux的多线程死锁问题定位方法及系统
CN115983393A (zh) * 2022-12-30 2023-04-18 北京百度网讯科技有限公司 量子电路任务超时原因确定方法、装置、设备及存储介质

Also Published As

Publication number Publication date
CN109189582B (zh) 2020-09-15

Similar Documents

Publication Publication Date Title
CN109189582A (zh) 一种检测信号量超时原因的方法及装置
US10878290B2 (en) Automatically tagging images to create labeled dataset for training supervised machine learning models
CN100583920C (zh) 测试脚本的生成方法及装置和测试方法及装置及系统
CN102207857B (zh) Gui元素识别方法、装置及系统
CN109359043B (zh) 一种基于机器学习的移动游戏自动化测试方法
CA2486482A1 (en) Event analysis system and method
CN108229418A (zh) 人体关键点检测方法和装置、电子设备、存储介质和程序
CN109857878B (zh) 物品标注方法及装置、电子设备及存储介质
CN111832578A (zh) 兴趣点信息处理方法、装置、电子设备和存储介质
CN112613569A (zh) 图像识别方法、图像分类模型的训练方法及装置
CN104616134A (zh) 一种报表分析报告推送方法及装置
CN112307864A (zh) 用于确定目标对象的方法、装置、人机交互系统
CN109359707A (zh) 岩土样品信息的处理方法、装置、计算机设备和存储介质
CN111832658B (zh) 兴趣点信息处理方法、装置、电子设备和存储介质
CN107293295B (zh) 一种执行自然语言命令所对应的任务的方法、设备和系统
CN106775960B (zh) 一种对Windows进程的唯一标示方法及系统
CN111768007B (zh) 用于挖掘数据的方法和装置
US20210365745A1 (en) Method and Apparatus for Implementing Automated Fossil Identification to Augment Biostratigraphy Workflows
CN112906478B (zh) 目标对象的识别方法、装置、设备和存储介质
CN115205589A (zh) 对象识别方法、装置、电子设备及存储介质
CN115169578A (zh) 一种基于元宇宙数据标记的ai模型生产方法及系统
CN105160333B (zh) 一种车型识别方法及识别装置
CN110084298A (zh) 用于检测图像相似度的方法及装置
CN109324964A (zh) 基于系统多个版本的压力测试方法及装置
CN107609008A (zh) 一种基于Apache Sqoop的从关系型数据库到Kafka的数据导入装置及方法

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