CN114817058A - 并发风险检测方法、装置、电子设备及存储介质 - Google Patents

并发风险检测方法、装置、电子设备及存储介质 Download PDF

Info

Publication number
CN114817058A
CN114817058A CN202210516569.8A CN202210516569A CN114817058A CN 114817058 A CN114817058 A CN 114817058A CN 202210516569 A CN202210516569 A CN 202210516569A CN 114817058 A CN114817058 A CN 114817058A
Authority
CN
China
Prior art keywords
execution unit
variable
logic execution
determining
logic
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
CN202210516569.8A
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.)
Beijing Baidu Netcom Science and Technology Co Ltd
Original Assignee
Beijing Baidu Netcom Science and 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 Beijing Baidu Netcom Science and Technology Co Ltd filed Critical Beijing Baidu Netcom Science and Technology Co Ltd
Priority to CN202210516569.8A priority Critical patent/CN114817058A/zh
Publication of CN114817058A publication Critical patent/CN114817058A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3692Test management for test results analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本公开提供了一种并发风险检测方法、装置、电子设备及存储介质,涉及计算机技术领域,尤其涉及数据处理领域。具体实现方案为:根据多个逻辑执行单元之间的依赖关系,确定并行单元组,并行单元组包括多个逻辑执行单元中满足预定条件的两个逻辑执行单元;从与并行单元组中的每个逻辑执行单元相对应的代码文件中,确定每个逻辑执行单元对变量的操作信息;以及根据每个逻辑执行单元对变量的操作信息,确定并行单元组的并发风险检测结果。

Description

并发风险检测方法、装置、电子设备及存储介质
技术领域
本公开涉及计算机技术领域,尤其涉及数据处理领域,更具体地,本公开提供了一种并发风险检测方法、装置、电子设备、存储介质以及计算机程序产品。
背景技术
随着多核技术的发展,多线程并发程序在现代软件应用中发挥着越来越重要的作用。与传统的顺序程序相比,具有多线程能力的计算机因有硬件系统和软件系统的支持而能够在同一时间执行多个线程,提高系统吞吐量,提升整体处理性能。对于多线程而言,多线程或多进程的交互顺序常会引起小概率的并发错误,进而造成程序异常。
发明内容
本公开提供了一种并发风险检测方法、装置、电子设备、存储介质以及计算机程序产品。
根据本公开的一方面,提供了一种并发风险检测方法,包括:根据多个逻辑执行单元之间的依赖关系,确定并行单元组,所述并行单元组包括所述多个逻辑执行单元中满足预定条件的两个逻辑执行单元;从与所述并行单元组中的每个逻辑执行单元相对应的代码文件中,确定所述每个逻辑执行单元对变量的操作信息;以及根据所述每个逻辑执行单元对变量的操作信息,确定所述并行单元组的并发风险检测结果。
根据本公开的另一方面,提供了一种并发风险检测装置,包括:第一确定模块、第二确定模块和结果确定模块。第一确定模块用于根据多个逻辑执行单元之间的依赖关系,确定并行单元组,所述并行单元组包括所述多个逻辑执行单元中满足预定条件的两个逻辑执行单元;第二确定模块用于从与所述并行单元组中的每个逻辑执行单元相对应的代码文件中,确定所述每个逻辑执行单元对变量的操作信息;结果确定模块用于根据所述每个逻辑执行单元对变量的操作信息,确定所述并行单元组的并发风险检测结果。
根据本公开的另一个方面,提供了一种电子设备,包括:至少一个处理器;以及与至少一个处理器通信连接的存储器;其中,存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行,以使至少一个处理器能够执行本公开提供的方法。
根据本公开的另一个方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,其中,计算机指令用于使计算机执行本公开提供的方法。
根据本公开的另一个方面,提供了一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现本公开提供的方法。
应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。
附图说明
附图用于更好地理解本方案,不构成对本公开的限定。其中:
图1是根据本公开实施例的并发风险检测方法和装置的应用场景示意图;
图2是根据本公开实施例的并发风险检测方法的示意流程图;
图3是根据本公开另一实施例的并发风险检测方法的示意流程图;
图4是根据本公开另一实施例的从代码文件中确定操作信息的示意原理图;
图5是根据本公开实施例的并发风险检测装置的示意结构框图;以及
图6是用来实施本公开实施例的并发风险检测方法的电子设备的结构框图。
具体实施方式
以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
图1是根据本公开实施例的并发风险检测方法和装置的应用场景示意图。
需要注意的是,图1所示仅为可以应用本公开实施例的系统架构的示例,以帮助本领域技术人员理解本公开的技术内容,但并不意味着本公开实施例不可以用于其他设备、系统、环境或场景。
如图1所示,根据该实施例的系统架构100可以包括终端设备101、102、103,网络104和服务器105。网络104用以在终端设备101、102、103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线和/或无线通信链路等等。
用户可以使用终端设备101、102、103通过网络104与服务器105交互,以接收或发送消息等。终端设备101、102、103可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器105可以是提供各种服务的服务器,例如对用户利用终端设备101、102、103所浏览的网站提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的用户请求等数据进行分析等处理,并将处理结果(例如并发风险检测结果等)反馈给终端设备。
需要说明的是,本公开实施例所提供的并发风险检测方法一般可以由服务器105执行。相应地,本公开实施例所提供的并发风险检测装置一般可以设置于服务器105中。本公开实施例所提供的并发风险检测方法也可以由不同于服务器105且能够与终端设备101、102、103和/或服务器105通信的服务器或服务器集群执行。相应地,本公开实施例所提供的并发风险检测装置也可以设置于不同于服务器105且能够与终端设备101、102、103和/或服务器105通信的服务器或服务器集群中。
应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
图2是根据本公开实施例的并发风险检测方法的示意流程图。
如图2所示,该并发风险检测方法200可以包括操作S210~操作S230。
在操作S210,根据多个逻辑执行单元之间的依赖关系,确定并行单元组,并行单元组包括多个逻辑执行单元中满足预定条件的两个逻辑执行单元。
例如,可以对控制流图进行解析,得到多个节点间的依赖关系。可以从多个逻辑执行单元之间确定出至少一组并行单元组,每个并行单元组包括两个逻辑执行单元,同一个并行单元组中的两个逻辑执行单元分别称为第一逻辑执行单元和第二逻辑执行单元。应当理解,两个并行单元组中可以包括同一个逻辑执行单元,例如一个并行单元组中可以包括逻辑执行单元Node_1和逻辑执行单元Node_2,另一个并行单元组中可以包括逻辑执行单元Node_1和逻辑执行单元Node_3。
例如,并行单元组中的两个逻辑单元之间可以满足兄弟关系。例如预定条件可以包括:第一逻辑执行单元的祖先单元集合中不包含第二逻辑执行单元,且第二逻辑执行单元的祖先单元集合中不包含第一逻辑执行单元。
例如,可以针对多个逻辑执行单元中的每个逻辑执行单元,根据多个逻辑执行单元之间的依赖关系,确定与每个逻辑执行单元对应的祖先单元集合,得到与多个逻辑执行单元分别对应的多个祖先单元集合。然后从多个逻辑执行单元任选两个逻辑执行单元,在确定与第一逻辑执行单元对应的祖先单元集合中不包含第二逻辑执行单元,且与第二逻辑执行单元对应的祖先单元集合中不包含第一逻辑执行单元的情况下,确定由第一逻辑执行单元和第二逻辑执行单元组成的并行单元组。
在操作S220,从与并行单元组中的每个逻辑执行单元相对应的代码文件中,确定每个逻辑执行单元对变量的操作信息。
例如,每个逻辑执行单元可以对应一个代码文件,一个代码文件可以对应至少一个逻辑执行单元。逻辑执行单元对应代码文件可以表示:逻辑执行单元在运行过程中可以使用该代码文件中的函数、变量等数据,来执行自身的逻辑。
代码文件中可以包括操作对象,操作对象可以包括变量,例如全局变量和局部变量。相应地,操作信息可以包括与操作对象有关的信息,例如操作信息可以包括变量类型(例如全局变量和局部变量)、作用域、引用信息以及定义行中的至少一个。代码文件例如可以包括cpp文件。
例如,可以使用cppcheck或者其他工具对代码文件进行解析,得到代码文件中与操作对象有关的信息。cppcheck是一种C/C++代码分析的工具,主要基于C++的词法、语法特点,生成token流和抽象语法树(AST),然后针对抽象语法树进行语义分析,构建内部数据结构。
代码文件中还可以包括用于对操作对象进行操作的代码,例如用于对变量进行写操作的代码。相应地,操作信息还可以包括针对操作对象的操作类型,操作类型可以是写操作或者读操作。例如,写操作可以利用预定函数实现,预定函数可以包括resize函数、emplace函数、sort函数、clear函数、swap函数、emplace_back函数、erase函数以及左赋值函数中的至少一个。
例如,可以使用cppcheck或者其他工具对代码进行解析,在确定解析后的代码文件中包含上述预定函数的情况下,可以确定对变量的操作类型是写操作。例如,在确定解析后的代码文件中不包含上述预定函数的情况下,可以确定对变量的操作类型是读操作。
在操作S230,根据每个逻辑执行单元对变量的操作信息,确定并行单元组的并发风险检测结果。
本公开实施例提供的技术方案采用并发风险进行静态检测,能够快速有效地对数据竞争引发的并发风险进行检测,确定并行单元组是否存在并发风险,从而方便工作人员对存在并发风险的逻辑执行单元进行处理,来减小并发风险。
通过减小并发风险,可以降低网络通信成本所导致的顺序访问吞吐无法提高和突破的问题,从而减小跨互联网数据中心以及网络拓扑对系统的顺序访问吞吐量的影响,提高资源利用率。其中,网络通信成本例如可以包括延时和程序异常造成的故障。
根据本公开另一实施例,操作信息可以包括与逻辑执行单元对应的变量和逻辑执行单元针对变量的操作类型。
相应地,上述确定并行逻辑单元组中的每个逻辑执行单元对变量的操作信息的操作,可以包括以下操作:根据与第一逻辑执行单元对应的代码文件,确定与第一逻辑执行单元对应的第一变量和第一逻辑执行单元针对第一变量的操作类型,作为第一逻辑执行单元对变量的操作信息。以及根据与第二逻辑执行单元对应的代码文件,确定与第二逻辑执行单元对应的第二变量和第二逻辑执行单元针对第二变量的操作类型,作为第二逻辑执行单元对变量的操作信息。
应当理解,由于两个逻辑执行单元同时对全局变量进行写操作;或者一个逻辑执行单元对全局变量进行写操作,另一个逻辑执行单元对全局变量进行读操作,容易造成并发风险。因此,本公开实施例中的操作信息包括变量和操作类型,可以为确定两个逻辑执行单元是否存在并发风险提供参考,提高确定并行风险的准确性。
根据本公开另一实施例,操作信息还可以包括逻辑执行单元针对变量的操作场景。
相应地,上述确定每个逻辑执行单元对变量的操作信息还可以包括以下操作:根据与第一逻辑执行单元对应的代码文件,确定第一逻辑执行单元针对第一变量的操作场景。以及根据与第二逻辑执行单元对应的代码文件,确定第二逻辑执行单元针对第二变量的操作场景。
需要说明的是,当并行逻辑单元组中的某个逻辑执行单元Node与代码文件相对应时,在一些示例中,与逻辑执行单元Node对应的变量可以包括:代码文件中所包括的全部变量。
在另一些示例中,与逻辑执行单元Node对应的变量可以包括:代码文件中所包括的一部分变量。例如,代码文件中可以包括条件语句,条件语句例如可以包括if和else语句。if语句下的代码用于对一些变量var_1进行操作,else语句下的代码用于对另一些变量var_2进行操作。逻辑执行单元Node可以受自身操作场景限制并执行if语句下的代码,可以不执行else语句下的代码。因此,与逻辑执行单元Node对应的第一变量可以包括代码文件中的if语句下的变量var_1,可以不包括代码文件中的else语句下的变量var_2。
本公开实施例考虑到代码文件中的条件语句,并利用条件语句确定逻辑执行单元的操作场景,从而在确定并发风险的过程中,将由于操作场景限制而理论上不会发生并发风险的逻辑执行单元过滤掉,进一步提高确定出的并发风险的准确性。
需要说明的是,第一逻辑执行单元与第一代码文件对应,第二逻辑执行单元与第二代码文件对应。第一代码文件和第二代码文件可以是同一个代码文件,也可以是两个代码文件。
例如,当第一逻辑执行单元和第二逻辑执行单元对应同一个代码文件时,即第一代码文件和第二代码文件是同一个代码文件时。可以对代码文件进行解析,得到代码文件中的变量和操作类型,若代码文件中包括全局变量和对用于全局变量进行写操作的代码,则可以确定第一逻辑执行单元和第二逻辑执行单元存在并发风险。
例如,当第一逻辑执行单元和第二逻辑执行单元对应同一个代码文件时。可以对代码文件进行解析,得到代码文件中的变量、操作类型和对变量进行操作的操作场景。若代码文件中包括全局变量和用于第一全局变量进行写操作的代码code1或者读操作的代码code2,第一逻辑执行单元受自身操作场景限制会执行代码code1,第二逻辑执行单元受自身操作场景限制会执行代码code1或代码code2。因此,可以确定第一逻辑执行单元和第二逻辑执行单元存在并发风险。
例如,当第一逻辑执行单元和第二逻辑执行单元对应同一个代码文件时。第一逻辑执行单元和第二逻辑执行单元的操作场景相同,例如第一逻辑执行单元和第二逻辑执行单元均会执行上述代码code1。因此,可以确定第一逻辑执行单元和第二逻辑执行单元存在并发风险。由于两个逻辑执行单元调用同一个代码文件,并且两个逻辑执行单元的操作场景相同时,更容易出现并发风险,因此可以在场景相同的情况下确定存在并发风险。
例如,当第一逻辑执行单元和第二逻辑执行单元对应两个代码文件时,即第一代码文件和第二代码文件是两个代码文件。可以对两个代码文件进行解析,得到每个代码文件中的变量和对变量进行操作的操作类型。若两个代码文件中包括相同的全局变量,并且第一代码文件中包括用于该全局变量进行写操作的代码code3,第二代码文件中包括用于对该全局变量进行写操作或读操作的代码code4,则可以确定第一逻辑执行单元和第二逻辑执行单元存在并发风险。
例如,当第一逻辑执行单元和第二逻辑执行单元对应两个代码文件时。可以对两个代码文件均进行解析,得到每个代码文件中的变量、对变量进行操作的操作类型和对变量进行操作的操作场景。若第一逻辑执行单元受自身操作场景限制会执行第一代码文件中对全局变量进行写操作的代码code3,第二逻辑执行单元受自身操作场景限制会执行第二代码文件中对同一个全局变量进行写操作或读操作发代码code4。因此,可以确定第一逻辑执行单元和第二逻辑执行单元存在并发风险。
根据本公开另一实施例,上述确定每个逻辑执行单元对变量的操作信息可以包括以下操作:对代码文件进行解析,得到函数调用链。然后在确定每个逻辑执行单元对应有父函数的情况下,根据函数调用链,确定与每个逻辑执行单元对应的父函数。然后根据父函数针对变量的操作场景,确定每个逻辑执行单元针对变量的操作场景。
例如,可以利用cppcheck解析工具对代码库中的多个代码文件进行解析,得到全局范围的函数调用链。
例如,可以利用cppcheck解析编译单元构造生成列表,其中,生成列表例如可以包括scoplist。然后提取函数类型并绑定函数地址,生成单个函数节点,存到全局数据中,生成文件粒度的函数集。然后基于代码文件粒度的函数集,获取代码文件中多个函数集,然后遍历函数内部的结构,例如遍历函数内部的双链表结构,匹配函数调用关系,得到与子函数对应的父函数,进而构造函数之间的父子关系,得到函数调用链。
需要说明的是,可以利用函数调用链确定变量与操作场景的对应关系。例如,父函数中限定满足某个操作场景的情况下调用子函数,同时在子函数中对某个变量进行写操作或者读操作。可以看出,虽然子函数中未限定对变量进行操作的操作场景,但是父函数中限定了对变量进行操作的操作场景。因此,可以将父函数针对变量的操作场景作为逻辑执行单元针对变量的操作场景。
本公开实施例利用函数调用链确定逻辑执行单元针对变量的操作场景,可以避免由于子函数中不涉及操作场景而遗漏逻辑执行单元的操作场景的情况,从而准确确定逻辑执行单元的操作场景。
根据本公开另一实施例,可以通过以下操作来确定代码文件中的变量是否为全局变量:对代码文件进行解析,得到变量变更链,变量变更链包括变量的作用域、引用信息和定义行。然后根据作用域、引用信息和定义行中的至少一个,确定代码文件中的变量是否为全局变量。
例如,可以利用cppcheck解析工具对代码库中的多个代码文件进行解析,得到变量变更树。变量变更树可以包括变量的父、子节点,父节点可以影响当前变量的取值,子节点受当前变量的影响,变量关系树可以表示变量类型、父节点个数、父节点之间的组合关系。可以对变量变更树进行解析,得到变量变更链。变量变更链可以记载所有变量在全局的取值范围变化,变量变更链中的节点可以包括变量文件名、函数名、行号粒度的取值,通过变量变更链可以确定变量在指定文件函数、指定函数、指定行的取值范围。变量变更链中记载的信息可以包括变量的作用域、引用信息、定义行等。
例如,当变量的作用域是global时,可以确定变量是全局变量。例如,当变量是引用类型,并且变量引用某个全局变量时,可以确定该变量是全局变量。例如,变量的定义行是全局变量赋值,可以确定变量是全局变量。
本公开实施例利用变量变更链确定与变量有关的信息,可以准确确定代码文件中的变量是否为全局变量。
图3是根据本公开另一实施例的并发风险检测方法的示意流程图。
如图3所示,本公开实施例中,可以包括操作S301至操作S307。
在操作S301,对代码文件和配置文件进行解析,得到操作信息。
例如,操作信息可以包括与代码文件中的与变量有关的信息和关系信息,与变量有关的信息可以包括变量的作用域、引用信息、定义行、针对变量的操作类型,关系信息可以包括逻辑执行单元之间的依赖关系、逻辑执行单元与代码文件的对应关系、逻辑执行单元与变量的对应关系等。
在操作S302,根据多个逻辑执行单元之间的依赖关系,确定并行单元组。并行单元组包括第一逻辑执行单元和第二逻辑执行单元。
在操作S303,确定第一逻辑执行单元和第二逻辑执行单元是否对应同一个代码文件。若是,则进入操作S304;若否,则进入操作S305。
在操作S304,确定操作信息是否满足第一条件,若是,则进入操作S306;若否,则进入操作S307。第一条件可以包括:代码文件中包括全局变量,还包括对该全局变量进行写操作的代码,第一逻辑执行单元会运行对该全局变量进行写操作的代码,第二逻辑执行单元会运行对该全局变量进行写操作的代码或者运行对该全局变量进行读操作的代码。
在操作S305,确定操作信息是否满足第二条件,若是,则进入操作S306;若否,则进入操作S307。第二条件可以包括:与第一逻辑执行单元对应的第一代码文件和与第二逻辑执行单元对应的第二代码文件包括相同的全局变量,第一代码文件和第二代码文件均包括对该全局变量进行操作的代码,第一逻辑执行单元会利用第一代码文件中的代码对该全局变量进行写操作,以及第二逻辑执行单元会利用第二代码文件中的代码对该全局变量进行写操作或读操作。
在操作S306,披露第一逻辑执行单元和第二逻辑执行单元存在并发风险。例如,可以通过生成风险提示信息进行披露。
在操作S307,结束。
图4是根据本公开另一实施例的从代码文件中确定操作信息的示意原理图。
如图4所示,本公开实施例中,可以通过以下方式的得到操作信息。
例如,可以利用cppcheck对代码库401中的多个代码文件进行解析,得到全局的函数调用链402和变量变更链404。
可以利用函数调用链402确定逻辑执行单元的操作场景403,例如逻辑执行单元调用子函数时,将该子函数的父函数对应的操作场景403确定为逻辑执行单元的操作场景403。
可以利用变量变更链404确定变量是否为全局变量405,例如可以将满足预定全局变量条件的变量确定为全局变量405,预定全局变量条件可以包括以下中的至少一个:变量的作用域是global;变量是引用类型,并且变量引用某个全局变量;变量的定义行是全局变量赋值。可以利用变量变更链404确定针对变量的操作类型等。
例如,可以利用代码解析工具对代码文件进行解析,得到控制流图406和注册文件408。然后对控制流图406进行解析得到逻辑执行单元之间的依赖关系407,可以对注册文件408进行解析,得到其他类型的关系信息409,例如其他类型的关系信息409可以包括逻辑执行单元与代码文件的对应关系和逻辑执行单元与变量的对应关系等。
代码库401中代码文件可以是格式为“.cpp”的文件,即cpp文件,注册文件408可以是格式为”_glue.h”的文件、格式为“.conf”的文件、格式为“.nodes”的文件中的至少一个。
在一些实施例中,本公开实施例提供的并发风险监测方法可以应用于图引擎,并针对图引擎下由数据竞争引发的并发风险进行检测。
图引擎是一个C++函数编程框架,可以通过组装和应用函数来构建应用的编程方法。图引擎的本质是基于图结构的执行引擎,图引擎涉及的实体主要包括节点(GraphVertex)、数据(GraphData)和依赖关系(GraphDependcy)。节点(GraphVertex)可以表示上文中的逻辑执行单元。数据包括图引擎的输入数据、输出数据和节点之间传递的数据,例如,节点Node_1的输出数据是节点Node_2的输入数据。存在数据传递的节点之间具有依赖关系,例如,上述节点Node_2依赖于节点Node_1。
根据本公开另一实施例,在本实施例中,以两个逻辑执行单元在同一个代码文件中实现为例,对并发风险检测过程进行说明。
可以通过对代码文件进行解析,得到多个逻辑执行单元间的依赖关系,例如,第一逻辑执行单元和第二逻辑执行单元组成一个并行单元组。还可以得到第一逻辑执行单元和第二逻辑执行单元对应的方法注册名相同,通过该方法注册名可以确定第一逻辑执行单元和第二逻辑执行单元对应的代码文件,例如代码文件是一个cpp文件。然后可以利用cppcheck对该cpp文件进行解析,确定逻辑执行单元和逻辑执行单元是否对同一个全局变量进行写操作。
解析后得到变量infos的作用域是global,global表示变量infos是全局变量。还可以得到利用sort函数对变量infos进行操作,sort函数是一种预先定义的写操作,sort函数可以对容器中的元素进行排序,需要交换容器中元素的存储位置,改变变量的存储空间。应当理解,当并行逻辑执行单元组的一个逻辑执行单元利用sort函数对变量infos进行操作,另一个逻辑执行单元对变量infos进行读操作或者写操作均会引发数据竞争问题,导致程序异常,因此存在并发风险。
图5是根据本公开实施例的并发风险检测装置的示意结构框图。
如图5所示,该并发风险检测装置500可以包括第一确定模块510、第二确定模块520和结果确定模块530。
第一确定模块510用于根据多个逻辑执行单元之间的依赖关系,确定并行单元组,并行单元组包括多个逻辑执行单元中满足预定条件的两个逻辑执行单元。
第二确定模块520用于从与并行单元组中的每个逻辑执行单元相对应的代码文件中,确定每个逻辑执行单元对变量的操作信息。
结果确定模块530用于根据每个逻辑执行单元对变量的操作信息,确定并行单元组的并发风险检测结果。
根据本公开另一实施例,并行单元组包括第一逻辑执行单元和第二逻辑执行单元。第二确定模块包括第一确定子模块和第二确定子模块。第一确定子模块用于根据与第一逻辑执行单元对应的代码文件,确定与第一逻辑执行单元对应的第一变量和第一逻辑执行单元针对第一变量的操作类型,作为第一逻辑执行单元对变量的操作信息。第二确定子模块用于根据与第二逻辑执行单元对应的代码文件,确定与第二逻辑执行单元对应的第二变量和第二逻辑执行单元针对第二变量的操作类型,作为第二逻辑执行单元对变量的操作信息。
根据本公开另一实施例,结果确定模块包括第一结果确定子模块,用于在确定第一变量和第二变量均包括第一全局变量,第一逻辑执行单元针对第一全局变量的操作类型为写操作,第二逻辑执行单元针对第一全局变量的操作类型为写操作或读操作的情况下,确定第一逻辑执行单元和第二逻辑执行单元存在并发风险。
根据本公开另一实施例,并行单元组包括第一逻辑执行单元和第二逻辑执行单元。第二确定模块包括第三确定子模块,用于在第一逻辑执行单元和第二逻辑执行单元对应同一个代码文件的情况下,根据代码文件,确定与第一逻辑执行单元对应的第一变量、第一逻辑执行单元针对第一变量的操作类型和操作场景、与第二逻辑执行单元对应的第二变量以及第二逻辑执行单元针对第二变量的操作类型和操作场景,作为操作信息。
根据本公开另一实施例,结果确定模块包括第二结果确定子模块,用于在确定第一变量和与第二变量均包括第二全局变量,第一逻辑执行单元针对第二全局变量的操作类型为写操作,第二逻辑执行单元针对第二全局变量的操作类型为写操作或读操作,并且第一逻辑执行单元和第二逻辑执行单元针对第二全局变量的操作场景相同的情况下,确定第一逻辑执行单元和第二逻辑执行单元存在并发风险。
根据本公开另一实施例,第二确定模块包括第一解析子模块、父函数确定子模块和场景确定子模块。第一解析子模块用于对代码文件进行解析,得到函数调用链。父函数确定子模块用于在确定每个逻辑执行单元对应有父函数的情况下,根据函数调用链,确定与每个逻辑执行单元对应的父函数。场景确定子模块用于根据父函数针对变量的操作场景,确定每个逻辑执行单元针对变量的操作场景。
根据本公开另一实施例,上述装置还包括解析模块和变量确定模块。解析模块用于对代码文件进行解析,得到变量变更链,变量变更链包括变量的作用域、引用信息和定义行。变量确定模块用于根据作用域、引用信息和定义行中的至少一个,确定代码文件中的变量是否为全局变量。
根据本公开另一实施例,预定条件包括:第一逻辑执行单元的祖先单元集合中不包含第二逻辑执行单元,且第二逻辑执行单元的祖先单元集合中不包含第一逻辑执行单元。
本公开的技术方案中,所涉及的用户个人信息的收集、存储、使用、加工、传输、提供和公开等处理,均符合相关法律法规的规定,且不违背公序良俗。
在本公开的技术方案中,在获取或采集用户个人信息之前,均获取了用户的授权或同意。
根据本公开的实施例,本公开还提供了一种电子设备,包括至少一个处理器;以及与至少一个处理器通信连接的存储器;存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行,以使至少一个处理器能够执行上述并发风险检测方法。
根据本公开的实施例,本公开还提供了一种存储有计算机指令的非瞬时计算机可读存储介质,其中,计算机指令用于使计算机执行上述并发风险检测方法。
根据本公开的实施例,本公开还提供了一种计算机程序产品,包括计算机程序,计算机程序在被处理器执行时实现上述并发风险检测方法。
图6示出了可以用来实施本公开的实施例的示例电子设备600的示意性框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。
如图6所示,设备600包括计算单元601,其可以根据存储在只读存储器(ROM)602中的计算机程序或者从存储单元608加载到随机访问存储器(RAM)603中的计算机程序,来执行各种适当的动作和处理。在RAM 603中,还可存储设备600操作所需的各种程序和数据。计算单元601、ROM 602以及RAM 603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
设备600中的多个部件连接至I/O接口605,包括:输入单元606,例如键盘、鼠标等;输出单元607,例如各种类型的显示器、扬声器等;存储单元608,例如磁盘、光盘等;以及通信单元609,例如网卡、调制解调器、无线通信收发机等。通信单元609允许设备600通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
计算单元601可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元601的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。计算单元601执行上文所描述的各个方法和处理,例如并发风险检测方法。例如,在一些实施例中,并发风险检测方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元608。在一些实施例中,计算机程序的部分或者全部可以经由ROM 602和/或通信单元609而被载入和/或安装到设备600上。当计算机程序加载到RAM 603并由计算单元601执行时,可以执行上文描述的并发风险检测方法的一个或多个步骤。备选地,在其他实施例中,计算单元601可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行并发风险检测方法。
本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、复杂可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)和互联网。
计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发公开中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。

Claims (19)

1.一种并发风险检测方法,包括:
根据多个逻辑执行单元之间的依赖关系,确定并行单元组,所述并行单元组包括所述多个逻辑执行单元中满足预定条件的两个逻辑执行单元;
从与所述并行单元组中的每个逻辑执行单元相对应的代码文件中,确定所述每个逻辑执行单元对变量的操作信息;以及
根据所述每个逻辑执行单元对变量的操作信息,确定所述并行单元组的并发风险检测结果。
2.根据权利要求1所述的方法,其中,所述并行单元组包括第一逻辑执行单元和第二逻辑执行单元;所述确定所述每个逻辑执行单元对变量的操作信息包括:
根据与所述第一逻辑执行单元对应的代码文件,确定与所述第一逻辑执行单元对应的第一变量和所述第一逻辑执行单元针对所述第一变量的操作类型,作为所述第一逻辑执行单元对变量的操作信息;以及
根据与所述第二逻辑执行单元对应的代码文件,确定与所述第二逻辑执行单元对应的第二变量和所述第二逻辑执行单元针对所述第二变量的操作类型,作为所述第二逻辑执行单元对变量的操作信息。
3.根据权利要求2所述的方法,其中,所述根据所述每个逻辑执行单元对变量的操作信息,确定所述并行单元组的并发风险检测结果包括:
在确定所述第一变量和所述第二变量均包括第一全局变量,所述第一逻辑执行单元针对所述第一全局变量的操作类型为写操作,所述第二逻辑执行单元针对所述第一全局变量的操作类型为写操作或读操作的情况下,确定所述第一逻辑执行单元和所述第二逻辑执行单元存在并发风险。
4.根据权利要求1所述的方法,其中,所述并行单元组包括第一逻辑执行单元和第二逻辑执行单元;所述确定所述每个逻辑执行单元对变量的操作信息包括:
在所述第一逻辑执行单元和所述第二逻辑执行单元对应同一个代码文件的情况下,根据所述代码文件,确定与所述第一逻辑执行单元对应的第一变量、所述第一逻辑执行单元针对所述第一变量的操作类型和操作场景、与所述第二逻辑执行单元对应的第二变量以及所述第二逻辑执行单元针对所述第二变量的操作类型和操作场景,作为所述操作信息。
5.根据权利要求4所述的方法,其中,所述根据所述每个逻辑执行单元对变量的操作信息,确定所述并行单元组的并发风险检测结果包括:
在确定所述第一变量和与所述第二变量均包括第二全局变量,所述第一逻辑执行单元针对所述第二全局变量的操作类型为写操作,所述第二逻辑执行单元针对所述第二全局变量的操作类型为写操作或读操作,并且所述第一逻辑执行单元和所述第二逻辑执行单元针对所述第二全局变量的操作场景相同的情况下,确定所述第一逻辑执行单元和所述第二逻辑执行单元存在并发风险。
6.根据权利要求4所述的方法,其中,确定所述每个逻辑执行单元对变量的操作信息包括:
对代码文件进行解析,得到函数调用链;
在确定所述每个逻辑执行单元对应有父函数的情况下,根据所述函数调用链,确定与所述每个逻辑执行单元对应的父函数;以及
根据所述父函数针对变量的操作场景,确定所述每个逻辑执行单元针对变量的操作场景。
7.根据权利要求1所述的方法,还包括:
对代码文件进行解析,得到变量变更链,所述变量变更链包括所述变量的作用域、引用信息和定义行;以及
根据所述作用域、引用信息和定义行中的至少一个,确定所述代码文件中的变量是否为全局变量。
8.根据权利要求1所述的方法,其中,所述预定条件包括:
所述第一逻辑执行单元的祖先单元集合中不包含所述第二逻辑执行单元,且所述第二逻辑执行单元的祖先单元集合中不包含所述第一逻辑执行单元。
9.一种并发风险检测装置,包括:
第一确定模块,用于根据多个逻辑执行单元之间的依赖关系,确定并行单元组,所述并行单元组包括所述多个逻辑执行单元中满足预定条件的两个逻辑执行单元;
第二确定模块,用于从与所述并行单元组中的每个逻辑执行单元相对应的代码文件中,确定所述每个逻辑执行单元对变量的操作信息;以及
结果确定模块,用于根据所述每个逻辑执行单元对变量的操作信息,确定所述并行单元组的并发风险检测结果。
10.根据权利要求9所述的装置,其中,所述并行单元组包括第一逻辑执行单元和第二逻辑执行单元;所述第二确定模块包括:
第一确定子模块,用于根据与所述第一逻辑执行单元对应的代码文件,确定与所述第一逻辑执行单元对应的第一变量和所述第一逻辑执行单元针对所述第一变量的操作类型,作为所述第一逻辑执行单元对变量的操作信息;以及
第二确定子模块,用于根据与所述第二逻辑执行单元对应的代码文件,确定与所述第二逻辑执行单元对应的第二变量和所述第二逻辑执行单元针对所述第二变量的操作类型,作为所述第二逻辑执行单元对变量的操作信息。
11.根据权利要求10所述的装置,其中,所述结果确定模块包括:
第一结果确定子模块,在确定所述第一变量和所述第二变量均包括第一全局变量,所述第一逻辑执行单元针对所述第一全局变量的操作类型为写操作,所述第二逻辑执行单元针对所述第一全局变量的操作类型为写操作或读操作的情况下,确定所述第一逻辑执行单元和所述第二逻辑执行单元存在并发风险。
12.根据权利要求9所述的装置,其中,所述并行单元组包括第一逻辑执行单元和第二逻辑执行单元;所述第二确定模块包括:
第三确定子模块,用于在所述第一逻辑执行单元和所述第二逻辑执行单元对应同一个代码文件的情况下,根据所述代码文件,确定与所述第一逻辑执行单元对应的第一变量、所述第一逻辑执行单元针对所述第一变量的操作类型和操作场景、与所述第二逻辑执行单元对应的第二变量以及所述第二逻辑执行单元针对所述第二变量的操作类型和操作场景,作为所述操作信息。
13.根据权利要求12所述的装置,其中,所述结果确定模块包括:
第二结果确定子模块,在确定所述第一变量和与所述第二变量均包括第二全局变量,所述第一逻辑执行单元针对所述第二全局变量的操作类型为写操作,所述第二逻辑执行单元针对所述第二全局变量的操作类型为写操作或读操作,并且所述第一逻辑执行单元和所述第二逻辑执行单元针对所述第二全局变量的操作场景相同的情况下,确定所述第一逻辑执行单元和所述第二逻辑执行单元存在并发风险。
14.根据权利要求12所述的装置,其中,所述第二确定模块包括:
第一解析子模块,用于对代码文件进行解析,得到函数调用链;
父函数确定子模块,用于在确定所述每个逻辑执行单元对应有父函数的情况下,根据所述函数调用链,确定与所述每个逻辑执行单元对应的父函数;以及
场景确定子模块,用于根据所述父函数针对变量的操作场景,确定所述每个逻辑执行单元针对变量的操作场景。
15.根据权利要求9所述的装置,还包括:
解析模块,用于对代码文件进行解析,得到变量变更链,所述变量变更链包括所述变量的作用域、引用信息和定义行;以及
变量确定模块,用于根据所述作用域、引用信息和定义行中的至少一个,确定所述代码文件中的变量是否为全局变量。
16.根据权利要求9所述的装置,其中,所述预定条件包括:
所述第一逻辑执行单元的祖先单元集合中不包含所述第二逻辑执行单元,且所述第二逻辑执行单元的祖先单元集合中不包含所述第一逻辑执行单元。
17.一种电子设备,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1至8中任一项所述的方法。
18.一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使所述计算机执行根据权利要求1至8中任一项所述的方法。
19.一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现根据权利要求1至8中任一项所述的方法。
CN202210516569.8A 2022-05-11 2022-05-11 并发风险检测方法、装置、电子设备及存储介质 Pending CN114817058A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210516569.8A CN114817058A (zh) 2022-05-11 2022-05-11 并发风险检测方法、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210516569.8A CN114817058A (zh) 2022-05-11 2022-05-11 并发风险检测方法、装置、电子设备及存储介质

Publications (1)

Publication Number Publication Date
CN114817058A true CN114817058A (zh) 2022-07-29

Family

ID=82512599

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210516569.8A Pending CN114817058A (zh) 2022-05-11 2022-05-11 并发风险检测方法、装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN114817058A (zh)

Similar Documents

Publication Publication Date Title
US11675575B2 (en) Checking source code validity at time of code update
US20170090892A1 (en) Systems and methods for dynamically replacing code objects for code pushdown
US11593342B2 (en) Systems and methods for database orientation transformation
JP7282823B2 (ja) メモリアクセスリクエストスケジューリング方法、装置、電子デバイス、コンピュータ可読記憶媒体及びコンピュータプログラム
US11934287B2 (en) Method, electronic device and computer program product for processing data
CN113419789A (zh) 数据模型脚本的生成方法和装置
US20210365406A1 (en) Method and apparatus for processing snapshot, device, medium and product
CN111352644A (zh) 小程序更新方法、装置、服务器及存储介质
CN116051031A (zh) 项目调度系统、介质及电子设备
CN113138767B (zh) 代码语言转换方法、装置、电子设备及存储介质
CN113141407B (zh) 一种页面资源加载方法、装置和电子设备
CN112286802B (zh) 一种测试程序性能方法、装置和电子设备
CN114817058A (zh) 并发风险检测方法、装置、电子设备及存储介质
EP3855314A1 (en) Method and apparatus for graph computing, electronic device and storage medium
CN114218313A (zh) 数据管理方法、装置、电子设备、存储介质及产品
CN112783574A (zh) 应用程序开发方法、装置、设备和存储介质
CN112947941A (zh) 一种添加异常处理代码的方法和装置
CN112068814A (zh) 可执行文件的生成方法、装置、系统及介质
US20240103853A1 (en) Code maintenance system
CN113031962B (zh) 编译方法、编译装置、电子设备、存储介质和程序产品
CN113760765B (zh) 代码测试方法、装置、电子设备和存储介质
CN110297639B (zh) 用于检测代码的方法和装置
CN115687141A (zh) 应用程序的测试方法、装置、电子设备和存储介质
CN117390023A (zh) 数据合计方法、数据合计装置、设备及存储介质
CN115794555A (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