CN110083539B - 一种数据竞争检测方法及装置 - Google Patents

一种数据竞争检测方法及装置 Download PDF

Info

Publication number
CN110083539B
CN110083539B CN201910354923.XA CN201910354923A CN110083539B CN 110083539 B CN110083539 B CN 110083539B CN 201910354923 A CN201910354923 A CN 201910354923A CN 110083539 B CN110083539 B CN 110083539B
Authority
CN
China
Prior art keywords
built
thread
container class
attribute
currently executed
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.)
Active
Application number
CN201910354923.XA
Other languages
English (en)
Other versions
CN110083539A (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.)
Guangzhou Cubesili Information Technology Co Ltd
Original Assignee
Guangzhou Huaduo Network 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 Guangzhou Huaduo Network Technology Co Ltd filed Critical Guangzhou Huaduo Network Technology Co Ltd
Priority to CN201910354923.XA priority Critical patent/CN110083539B/zh
Publication of CN110083539A publication Critical patent/CN110083539A/zh
Application granted granted Critical
Publication of CN110083539B publication Critical patent/CN110083539B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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/362Software debugging
    • G06F11/3644Software debugging by instrumenting at runtime
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/366Software debugging using diagnostics

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)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本发明提供一种数据竞争检测方法及装置,该方案包括:基于预先建立的全局映射Map,获取当前所执行的线程的容器类的内置属性,容器类的内置属性预先存储于全局映射Map中,判断内置属性所对应的值value是否为空,若不为空,判断内置属性所对应的内置线程是否与当前所执行的线程一致,若不一致,则确定当前所执行的线程的容器类发生数据竞争。基于本发明,通过比较容器类的内置属性所对应的内置线程与容器类当前所执行的线程,确定容器类是否满足发生数据竞争的条件,从而有效准确地检测出会发生数据竞争的容器类,实现减少因不确定哪些容器类会发生数据竞争而导致的资源浪费的目的。

Description

一种数据竞争检测方法及装置
技术领域
本发明涉及计算机编程开发技术领域,尤其涉及一种数据竞争检测方法及装置。
背景技术
在计算机编程领域中,若某一容器类中发生数据竞争,会导致程序的运行结果不可预知,大大影响程序的可靠性。为了保证程序的可靠性,开发者通过在会发生数据竞争的容器类中增加互斥锁,来消除数据竞争。
目前,现有的方案是对程序中所有的容器类添加互斥锁,保证消除所有容器类的数据竞争。然而,并不是所有的容器类都会在执行操作时发生数据竞争,个别容器类所增加的互斥锁是无用的,现有的方案存在着巨大的无用消耗,大大浪费系统资源。
发明内容
有鉴于此,本发明实施例提供一种数据竞争检测方法及装置,以解决因不确定哪些容器类会发生数据竞争而导致资源浪费的问题。
为实现上述目的,本发明实施例提供如下技术方案:
本发明实施例第一方面公开了一种数据竞争检测方法,所述数据竞争检测方法包括:
基于预先建立的全局映射Map,获取当前所执行的线程的容器类的内置属性,所述容器类的内置属性预先存储于所述全局映射Map中;
判断所述内置属性所对应的值value是否为空;
若不为空,判断所述内置属性所对应的内置线程是否与所述当前所执行的线程一致;
若不一致,则确定所述当前所执行的线程的容器类发生数据竞争。
优选的,在上述数据竞争检测方法中,所述容器类的内置属性预先存储于所述全局映射Map中的过程,包括:
创建全局映射Map;
建立对应所述容器类的对象;
将所述对象的地址作为所述容器类对应的键key,将所述对象作为所述容器类的内置属性所对应的值value;
建立所述容器类对应的所述键key和所述值value的对应关系,存储于所述全局映射Map中。
优选的,在上述数据竞争检测方法中,若所述当前所执行的线程为写操作线程,还包括:
若所述内置属性所对应的值value为空,将所述当前所执行的线程作为内置线程存储至所述内置属性中,并执行所述写操作线程。
优选的,在上述数据竞争检测方法中,若所述当前所执行的线程为写操作线程,还包括:
若所述内置属性所对应内置的线程与所述当前所执行的线程一致,执行所述写操作线程。
优选的,在上述数据竞争检测方法中,若所述当前所执行的线程为读操作线程,还包括:
若所述内置属性所对应内置的线程与所述当前所执行的线程一致,执行所述读操作线程。
优选的,在上述数据竞争检测方法中,在确定所述当前所执行的线程的容器类发生数据竞争之后,还包括:
为发生数据竞争的所述容器类添加互斥锁。
本发明实施例第二方面公开了一种数据竞争检测装置,所述数据竞争检测装置包括:
获取单元,用于基于预先建立的全局映射Map,获取当前所执行的线程的容器类的内置属性,所述容器类的内置属性预先存储于所述全局映射Map中;
第一判断单元,用于判断所述内置属性所对应的值value是否为空;
第二判断单元,用于判断所述内置属性所对应的内置线程是否与所述当前所执行的线程一致;
确定单元,用于确定所述当前所执行的线程的容器类发生数据竞争。
优选的,在上述数据竞争检测装置中,还包括:
存储单元,用于当所述当前所执行的线程为写操作线程时,若所述内置属性所对应的值value为空,将所述当前所执行的线程作为内置线程存储至所述内置属性中,并执行所述写操作线程。
本发明实施例第三方面公开了一种电子设备,所述电子设备用于运行程序,其中,所述程序运行时执行如上述本发明实施例第一方面公开的数据竞争检测方法。
本发明实施例第四方面公开了一种存储介质,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行如上述本发明实施例第一方面公开的数据竞争检测方法。
基于上述本发明实施例提供的一种数据竞争检测方法、装置、电子设备及存储介质,基于预先建立的全局映射Map,获取当前所执行的线程的容器类的内置属性,所述容器类的内置属性预先存储于所述全局映射Map中;判断所述内置属性所对应的值value是否为空;若不为空,判断所述内置属性所对应的内置线程是否与所述当前所执行的线程一致;若不一致,则确定所述当前所执行的线程的容器类发生数据竞争。基于本发明实施例,通过比较容器类的内置属性所对应的内置线程与所述容器类当前所执行的线程,确定所述容器类是否满足发生数据竞争的条件,从而有效准确地检测出会发生数据竞争的容器类,实现减少因不确定哪些容器类会发生数据竞争而导致的资源浪费的目的。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明实施例提供的一种数据竞争检测方法的流程示意图;
图2为本发明实施例提供的一种容器类的内置属性存储于全局映射Map的方法的流程示意图;
图3为本发明实施例提供的另一种数据竞争检测方法的流程示意图;
图4为本发明实施例提供的另一种数据竞争检测方法的流程示意图;
图5为本发明实施例提供的另一种数据竞争检测方法的流程示意图;
图6为本发明实施例提供的一种数据竞争检测装置的结构示意图;
图7为本发明实施例提供的另一种数据竞争检测装置的结构示意图;
图8为本发明实施例提供的另一种数据竞争检测装置的结构示意图;
图9为本发明实施例提供的另一种数据竞争检测装置的结构示意图;
图10为本发明实施例提供的另一种数据竞争检测装置的结构示意图;
图11为本发明实施例提供的另一种数据竞争检测装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本申请中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
在本发明实施例中,可以基于自定义的实现方法替换系统原有的实现(Hook)方法,实现对应用程序中的各个容器类的数据竞争检测,从而能够在应用程序的系统原实现基础上实现额外的判断处理,有效减少应用程序的复杂性。
在具体实现中,在应用程序启动后,利用预先设置的Hook函数,Hook了容器类将要执行的写操作线程或者读操作线程,并依据本发明实施例提供的方法,在容器类实际执行写操作线程或者读操作线程之前判断所述容器类是否会发生数据竞争。
需要说明的是,在本发明实施例中,数据竞争具体指的是:当两个线程并发访问同一个容器类,并且至少存在一个写操作线程时,所述容器类就会发生数据竞争,数据竞争会导致应用程序的运行结果不可预知,从而降低所述应用程序的可靠性。
需要说明的是,在本发明实施例中,所述容器类具体指的是计算机编程代码中的Array、Dictionary(Map)、Set等数据结构。
如图1所示,为本发明实施例提供的一种数据竞争检测方法的流程示意图,所述方法包括如下步骤:
S101:基于预先建立的全局映射Map,获取当前所执行的线程的容器类的内置属性。
在S101中,所述容器类的内置属性预先存储于所述全局映射Map中。
需要说明的是,在所述全局映射Map中,任一容器类对应一内置属性。
S102:判断内置属性所对应的值value是否为空。
在S102中,若所述内置属性所对应的值value不为空,则执行S103。
需要说明的是,在所述全局映射Map中,以键值对(key value)的方式存储与容器类相关的内容,其中,键key代表容器类,值value代表所述容器类的内置属性。
在具体实现中,当所述当前所执行的线程为写操作线程时,若所述内置属性所对应的值value为空,则可以确定所述内置属性对应的容器类为第一次执行写操作线程,并将所述写操作线程作为所述内置属性的新值value存储至所述全局映射Map中;当所述当前所执行的线程为读操作线程时,若所述内置属性所对应的值value为空,则直接执行所述读操作线程。
S103:判断内置属性所对应的内置线程是否与当前所执行的线程一致。
在S103中,若所述内置属性所对应的内置线程与所述当前所执行的线程不一致,则执行S104。
需要说明的是,任一所述内置属性对应一内置线程,基于所述全局映射Map中存储的键值对(key value),可以利用所述内置属性所对应的键key确定对应的值value,所述值value用于指示所述内置属性所对应的内置线程。
S104:确定当前所执行的线程的容器类发生数据竞争。
在S104中,因所述内置线程与所述当前所执行的线程不一致,则可确定所述容器类满足发生数据竞争的条件,所述容器类会发生数据竞争。
在本发明实施例中,基于预先建立的全局映射Map,获取当前所执行的线程的容器类的内置属性,所述容器类的内置属性预先存储于所述全局映射Map中;判断所述内置属性所对应的值value是否为空;若不为空,判断所述内置属性所对应的内置线程是否与所述当前所执行的线程一致;若不一致,则确定所述当前所执行的线程的容器类发生数据竞争。基于本发明实施例,通过比较容器类的内置属性所对应的内置线程与所述容器类当前所执行的线程,确定所述容器类是否满足发生数据竞争的条件,从而有效准确地检测出会发生数据竞争的容器类,实现减少因不确定哪些容器类会发生数据竞争而导致的资源浪费的目的。
优选的,在上述图1示出的S101中,所述容器类的内置属性预先存储于所述全局映射Map中,这一过程在具体实现中,参考图2,为本发明实施例提供的一种容器类的内置属性存储于全局映射Map的方法的流程示意图,所述方法包括如下步骤:
S201:创建全局映射Map。
在S201中,在所述全局映射Map中,以键值对(key value)的方式存储与容器类相关的内容。
S202:建立对应容器类的对象。
在S202中,初始化容器类,建立对应容器类的对象。任一所述容器类对应的对象在容器类初始化状态下时都为空,在所述容器类初始化结束后,可以为所述对象进行赋值。
S203:将对象的地址作为容器类对应的键key,将对象作为容器类的内置属性所对应的值value。
在S203中,基于所述全局映射Map中存储的键值对(key value),通过所述对象的地址可以确定对应的对象,换而言之,利用所述容器类的对象可以确定所述容器类的内置属性所对应的值value。
S204:建立容器类对应的键key和值value的对应关系,存储于全局映射Map中。
在S204中,所述键key和值value的对应关系即为所述全局映射Map中的键值对(key value)。
需要说明的是,在本发明实施例中,将内置属性所对应的内置线程作为值value存储至所述全局映射Map中。由此可知,基于所述对应关系,可以有效确定任一容器类的内置属性和对应的内置线程。
在本发明实施例中,通过创建全局映射Map;建立对应所述容器类的对象;将所述对象的地址作为所述容器类对应的键key,将所述对象作为所述容器类的内置属性所对应的值value;建立所述容器类对应的所述键key和所述值value的对应关系,存储于所述全局映射Map中。基于本发明实施例,实现将容器类的内置属性存储于全局映射Map中。
优选的,结合图1,参考图3,为本发明实施例提供的另一种数据竞争检测方法的流程示意图,所述方法包括如下步骤:
S301:基于预先建立的全局映射Map,获取当前所执行的线程的容器类的内置属性。
在S301中,S301的具体执行过程和实现原理与上述图1示出的S101的具体执行过程和实现原理一致,可参见,这里不再赘述。
S302:判断内置属性所对应的值value是否为空。
在S302中,若所述内置属性所对应的值value不为空,则执行S303。
S303:判断内置属性所对应的内置线程是否与当前所执行的线程一致。
在S303中,若所述内置属性所对应的内置线程是否与当前所执行的线程不一致,则执行S304。
S304:确定当前所执行的线程的容器类发生数据竞争。
在S304中,S304的具体执行过程和实现原理与上述图1示出的S104的具体执行过程和实现原理一致,可参见,这里不再赘述。
S305:为发生数据竞争的容器类添加互斥锁。
在本发明实施例中,基于预先建立的全局映射Map,获取当前所执行的线程的容器类的内置属性,所述容器类的内置属性预先存储于所述全局映射Map中;判断所述内置属性所对应的值value是否为空;若不为空,判断所述内置属性所对应的内置线程是否与所述当前所执行的线程一致;若不一致,则确定所述当前所执行的线程的容器类发生数据竞争。基于本发明实施例,通过比较容器类的内置属性所对应的内置线程与所述容器类当前所执行的线程,确定所述容器类是否满足发生数据竞争的条件,从而有效准确地检测出会发生数据竞争的容器类,实现减少因不确定哪些容器类会发生数据竞争而导致的资源浪费的目的。
在本发明实施例中,所述容器类可执行的线程包括写操作线程和读操作线程。相应的,当所述内置属性所对应的内置线程与所述当前所执行的线程一致时,会使所述容器类执行不同的线程。
优选的,结合图3,参考图4,为本发明实施例提供的另一种数据竞争检测方法的流程示意图,当所述当前所执行的线程为写操作线程时,所述方法包括如下步骤:
S401:基于预先建立的全局映射Map,获取当前所执行的写操作线程的容器类的内置属性。
在S401中,S401的具体执行过程和实现原理与上述图1示出的S101的具体执行过程和实现原理一致,可参见,这里不再赘述。
S402:判断内置属性所对应的值value是否为空。
在S402中,若所述内置属性所对应的值value为空,则执行S403,若所述内置属性所对应的值value不为空,则执行S404。
S403:将当前所执行的写操作线程作为内置线程存储至内置属性中,并执行写操作线程。
在S403中,基于所述全局映射Map中存储的键值对(key value),利用键key确定所述内置属性所对应的值value,并将所述当前所执行的写操作线程作为所述内置属性所对应的值value。此外,确定所述容器类不会发生数据竞争。
S404:判断内置属性所对应的内置线程是否与当前所执行的写操作线程一致。
在S404中,若所述内置属性所对应的内置线程与所述当前所执行的写操作线程一致,则执行S406,若所述内置属性所对应的内置线程与所述当前所执行的写操作线程不一致,则执行S405。
S405:确定当前所执行的写操作线程的容器类发生数据竞争。
在执行S405后,接着执行S407。
S406:执行写操作线程。
在S406中,确定所述容器类不会发生数据竞争。
S407:为发生数据竞争的容器类添加互斥锁。
在本发明实施例中,基于预先建立的全局映射Map,获取当前所执行的线程的容器类的内置属性,所述容器类的内置属性预先存储于所述全局映射Map中;判断所述内置属性所对应的值value是否为空;若不为空,判断所述内置属性所对应的内置线程是否与所述当前所执行的线程一致;若不一致,则确定所述当前所执行的线程的容器类发生数据竞争。基于本发明实施例,通过比较容器类的内置属性所对应的内置线程与所述容器类当前所执行的线程,确定所述容器类是否满足发生数据竞争的条件,从而有效准确地检测出会发生数据竞争的容器类,实现减少因不确定哪些容器类会发生数据竞争而导致的资源浪费的目的。
优选的,结合图3,参考图5,为本发明实施例提供的另一种数据竞争检测方法的流程示意图,当所述当前所执行的线程为读操作线程时,所述方法包括如下步骤:
S501:基于预先建立的全局映射Map,获取当前所执行的读操作线程的容器类的内置属性。
在S501中,S501的具体执行过程和实现原理与上述图1示出的S101的具体执行过程和实现原理一致,可参见,这里不再赘述。
S502:判断内置属性所对应的值value是否为空。
在S502中,若所述内置属性所对应的值value为空,则执行S505,若所述内置属性所对应的值value不为空,则执行S503。
S503:判断内置属性所对应的内置线程是否与当前所执行的读操作线程一致。
在S503中,若所述内置属性所对应的内置线程与所述当前所执行的读操作线程一致,则执行S505,若不一致,则执行S504。
S504:确定当前所执行的读操作线程的容器类发生数据竞争。
在执行S504后,接着执行S506。
S505:执行读操作线程。
在S505中,确定所述容器类不会发生数据竞争。
S506:为发生数据竞争的容器类添加互斥锁。
在本发明实施例中,基于预先建立的全局映射Map,获取当前所执行的线程的容器类的内置属性,所述容器类的内置属性预先存储于所述全局映射Map中;判断所述内置属性所对应的值value是否为空;若不为空,判断所述内置属性所对应的内置线程是否与所述当前所执行的线程一致;若不一致,则确定所述当前所执行的线程的容器类发生数据竞争。基于本发明实施例,通过比较容器类的内置属性所对应的内置线程与所述容器类当前所执行的线程,确定所述容器类是否满足发生数据竞争的条件,从而有效准确地检测出会发生数据竞争的容器类,实现减少因不确定哪些容器类会发生数据竞争而导致的资源浪费的目的。
基于上述本发明实施例提供的数据竞争检测方法,本发明实施例还对应提供了一种数据竞争检测装置。如图6所示,为本发明实施例提供的一种数据竞争检测装置的结构示意图,所述装置包括:
获取单元100,用于基于预先建立的全局映射Map,获取当前所执行的线程的容器类的内置属性,所述容器类的内置属性预先存储于所述全局映射Map中。
第一判断单元200,用于判断所述内置属性所对应的值value是否为空。
第二判断单元300,用于判断所述内置属性所对应的内置线程是否与所述当前所执行的线程一致。
确定单元400,用于确定所述当前所执行的线程的容器类发生数据竞争。
在本发明实施例中,基于预先建立的全局映射Map,获取当前所执行的线程的容器类的内置属性,所述容器类的内置属性预先存储于所述全局映射Map中;判断所述内置属性所对应的值value是否为空;若不为空,判断所述内置属性所对应的内置线程是否与所述当前所执行的线程一致;若不一致,则确定所述当前所执行的线程的容器类发生数据竞争。基于本发明实施例,通过比较容器类的内置属性所对应的内置线程与所述容器类当前所执行的线程,确定所述容器类是否满足发生数据竞争的条件,从而有效准确地检测出会发生数据竞争的容器类,实现减少因不确定哪些容器类会发生数据竞争而导致的资源浪费的目的。
优选的,结合图6,参考图7,为本发明实施例提供的另一种数据竞争检测装置的结构示意图,所述获取单元100包括:
创建模块101,用于创建全局映射Map。
建立模块102,用于建立对应所述容器类的对象。
对应模块103,用于将所述对象的地址作为所述容器类对应的键key,将所述对象作为所述容器类的内置属性所对应的值value。
存储模块104,用于建立所述容器类对应的所述键key和所述值value的对应关系,存储于所述全局映射Map中。
在本发明实施例中,通过创建全局映射Map;建立对应所述容器类的对象;将所述对象的地址作为所述容器类对应的键key,将所述对象作为所述容器类的内置属性所对应的值value;建立所述容器类对应的所述键key和所述值value的对应关系,存储于所述全局映射Map中。基于本发明实施例,实现将容器类的内置属性存储于全局映射Map中。
优选的,结合图6,参考图8,为本发明实施例提供的另一种数据竞争检测装置的结构示意图,所述装置还包括:
处理单元500,用于为发生数据竞争的所述容器类添加互斥锁。
在本发明实施例中,基于预先建立的全局映射Map,获取当前所执行的线程的容器类的内置属性,所述容器类的内置属性预先存储于所述全局映射Map中;判断所述内置属性所对应的值value是否为空;若不为空,判断所述内置属性所对应的内置线程是否与所述当前所执行的线程一致;若不一致,则确定所述当前所执行的线程的容器类发生数据竞争。基于本发明实施例,通过比较容器类的内置属性所对应的内置线程与所述容器类当前所执行的线程,确定所述容器类是否满足发生数据竞争的条件,从而有效准确地检测出会发生数据竞争的容器类,实现减少因不确定哪些容器类会发生数据竞争而导致的资源浪费的目的。
优选的,结合图8,参考图9,为本发明实施例提供的另一种数据竞争检测装置的结构示意图,所述装置还包括:
存储单元600,用于当所述当前所执行的线程为写操作线程时,若所述内置属性所对应的值value为空,将所述当前所执行的线程作为内置线程存储至所述内置属性中,并执行所述写操作线程。
在本发明实施例中,基于预先建立的全局映射Map,获取当前所执行的线程的容器类的内置属性,所述容器类的内置属性预先存储于所述全局映射Map中;判断所述内置属性所对应的值value是否为空;若不为空,判断所述内置属性所对应的内置线程是否与所述当前所执行的线程一致;若不一致,则确定所述当前所执行的线程的容器类发生数据竞争。基于本发明实施例,通过比较容器类的内置属性所对应的内置线程与所述容器类当前所执行的线程,确定所述容器类是否满足发生数据竞争的条件,从而有效准确地检测出会发生数据竞争的容器类,实现减少因不确定哪些容器类会发生数据竞争而导致的资源浪费的目的。
优选的,结合图9,参考图10,为本发明实施例提供的另一种数据竞争检测装置的结构示意图,所述装置还包括:
第一执行单元700,用于当所述当前所执行的线程为写操作线程时,若所述内置属性所对应内置的线程与所述当前所执行的线程一致,执行所述写操作线程。
在本发明实施例中,基于预先建立的全局映射Map,获取当前所执行的线程的容器类的内置属性,所述容器类的内置属性预先存储于所述全局映射Map中;判断所述内置属性所对应的值value是否为空;若不为空,判断所述内置属性所对应的内置线程是否与所述当前所执行的线程一致;若不一致,则确定所述当前所执行的线程的容器类发生数据竞争。基于本发明实施例,通过比较容器类的内置属性所对应的内置线程与所述容器类当前所执行的线程,确定所述容器类是否满足发生数据竞争的条件,从而有效准确地检测出会发生数据竞争的容器类,实现减少因不确定哪些容器类会发生数据竞争而导致的资源浪费的目的。
优选的,结合图8,参考图11,为本发明实施例提供的另一种数据竞争检测装置的结构示意图,所述装置还包括:
第二执行单元800,用于当所述当前所执行的线程为读操作线程时,若所述内置属性所对应内置的线程与所述当前所执行的线程一致,执行所述读操作线程。
综上所述,在本发明实施例公开的一种数据竞争检测方法及装置中,基于预先建立的全局映射Map,获取当前所执行的线程的容器类的内置属性,所述容器类的内置属性预先存储于所述全局映射Map中;判断所述内置属性所对应的值value是否为空;若不为空,判断所述内置属性所对应的内置线程是否与所述当前所执行的线程一致;若不一致,则确定所述当前所执行的线程的容器类发生数据竞争。基于本发明实施例,通过比较容器类的内置属性所对应的内置线程与所述容器类当前所执行的线程,确定所述容器类是否满足发生数据竞争的条件,从而有效准确地检测出会发生数据竞争的容器类,实现减少因不确定哪些容器类会发生数据竞争而导致的资源浪费的目的。
基于上述本发明实施例公开的数据竞争检测装置,上述各个模块可以通过一种由处理器和存储器构成的电子设备实现。具体为:上述各个模块作为程序单元存储于存储器中,由处理器执行存储在存储器中的上述程序单元来实现数据竞争检测。
其中,处理器中包含内核,由内核去存储器中调取相应的程序单元。内核可以设置一个或以上,通过调整内核参数来实现数据竞争检测。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM),存储器包括至少一个存储芯片。
进一步的,本发明实施例提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行数据竞争检测方法。
进一步的,本发明实施例提供了一种电子设备,所述电子设备包括处理器、存储器及存储在存储器上并可在处理器上运行的程序,处理器执行程序时实现以下步骤:基于预先建立的全局映射Map,获取当前所执行的线程的容器类的内置属性,所述容器类的内置属性预先存储于所述全局映射Map中;判断所述内置属性所对应的值value是否为空;若不为空,判断所述内置属性所对应的内置线程是否与所述当前所执行的线程一致;若不一致,则确定所述当前所执行的线程的容器类发生数据竞争。
其中,所述容器类的内置属性预先存储于所述全局映射Map中的过程,包括:创建全局映射Map;建立对应所述容器类的对象;将所述对象的地址作为所述容器类对应的键key,将所述对象作为所述容器类的内置属性所对应的值value;建立所述容器类对应的所述键key和所述值value的对应关系,存储于所述全局映射Map中。
进一步的,若所述当前所执行的线程为写操作线程,且所述内置属性所对应的值value为空,将所述当前所执行的线程作为内置线程存储至所述内置属性中,并执行所述写操作线程。
进一步的,若所述当前所执行的线程为写操作线程,且所述内置属性所对应内置的线程与所述当前所执行的线程一致,执行所述写操作线程。
进一步的,若所述当前所执行的线程为读操作线程,且所述内置属性所对应内置的线程与所述当前所执行的线程一致,执行所述读操作线程。
进一步的,在确定所述当前所执行的线程的容器类发生数据竞争之后,为发生数据竞争的所述容器类添加互斥锁。
本发明实施例中公开的设备可以是PC、PAD、手机等。
进一步的,本发明实施例还提供了一种存储介质,其上存储有程序,该程序被处理器执行时实现数据竞争检测。
本申请还提供了一种计算机程序产品,当在数据处理设备上执行时,适于执行初始化有如下方法步骤的程序:
基于预先建立的全局映射Map,获取当前所执行的线程的容器类的内置属性,所述容器类的内置属性预先存储于所述全局映射Map中;判断所述内置属性所对应的值value是否为空;若不为空,判断所述内置属性所对应的内置线程是否与所述当前所执行的线程一致;若不一致,则确定所述当前所执行的线程的容器类发生数据竞争。
其中,所述容器类的内置属性预先存储于所述全局映射Map中的过程,包括:创建全局映射Map;建立对应所述容器类的对象;将所述对象的地址作为所述容器类对应的键key,将所述对象作为所述容器类的内置属性所对应的值value;建立所述容器类对应的所述键key和所述值value的对应关系,存储于所述全局映射Map中。
进一步的,若所述当前所执行的线程为写操作线程,且所述内置属性所对应的值value为空,将所述当前所执行的线程作为内置线程存储至所述内置属性中,并执行所述写操作线程。
进一步的,若所述当前所执行的线程为写操作线程,且所述内置属性所对应内置的线程与所述当前所执行的线程一致,执行所述写操作线程。
进一步的,若所述当前所执行的线程为读操作线程,且所述内置属性所对应内置的线程与所述当前所执行的线程一致,执行所述读操作线程。
进一步的,在确定所述当前所执行的线程的容器类发生数据竞争之后,为发生数据竞争的所述容器类添加互斥锁。
本领域内的技术人员应明白,本申请的实施例可提供为方法、装置、客户端、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。存储器是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的系统及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (10)

1.一种数据竞争检测方法,其特征在于,所述方法包括:
基于预先建立的全局映射Map,获取当前所执行的线程的容器类的内置属性,所述容器类的内置属性预先存储于所述全局映射Map中,在所述全局映射Map中,任一容器类对应一内置属性;
判断所述内置属性所对应的值value是否为空,所述值value用于指示所述内置属性所对应的内置线程;
若不为空,判断所述内置属性所对应的内置线程是否与所述当前所执行的线程一致;
若不一致,则确定所述当前所执行的线程的容器类发生数据竞争。
2.根据权利要求1所述的方法,其特征在于,所述容器类的内置属性预先存储于所述全局映射Map中的过程,包括:
创建全局映射Map;
建立对应所述容器类的对象;
将所述对象的地址作为所述容器类对应的键key,将所述对象作为所述容器类的内置属性所对应的值value;
建立所述容器类对应的所述键key和所述值value的对应关系,存储于所述全局映射Map中。
3.根据权利要求1所述的方法,其特征在于,若所述当前所执行的线程为写操作线程,还包括:
若所述内置属性所对应的值value为空,将所述当前所执行的线程作为内置线程存储至所述内置属性中,并执行所述写操作线程。
4.根据权利要求1所述的方法,其特征在于,若所述当前所执行的线程为写操作线程,还包括:
若所述内置属性所对应内置的线程与所述当前所执行的线程一致,执行所述写操作线程。
5.根据权利要求1所述的方法,其特征在于,若所述当前所执行的线程为读操作线程,还包括:
若所述内置属性所对应内置的线程与所述当前所执行的线程一致,执行所述读操作线程。
6.根据权利要求1-5中任一项所述的方法,其特征在于,在确定所述当前所执行的线程的容器类发生数据竞争之后,还包括:
为发生数据竞争的所述容器类添加互斥锁。
7.一种数据竞争检测装置,其特征在于,包括:
获取单元,用于基于预先建立的全局映射Map,获取当前所执行的线程的容器类的内置属性,所述容器类的内置属性预先存储于所述全局映射Map中,在所述全局映射Map中,任一容器类对应一内置属性;
第一判断单元,用于判断所述内置属性所对应的值value是否为空,所述值value用于指示所述内置属性所对应的内置线程;
第二判断单元,用于判断所述内置属性所对应的内置线程是否与所述当前所执行的线程一致;
确定单元,用于确定所述当前所执行的线程的容器类发生数据竞争。
8.根据权利要求7所述的装置,其特征在于,还包括:
存储单元,用于当所述当前所执行的线程为写操作线程时,若所述内置属性所对应的值value为空,将所述当前所执行的线程作为内置线程存储至所述内置属性中,并执行所述写操作线程。
9.一种电子设备,其特征在于,所述电子设备用于运行程序,其中,所述程序运行时执行如权利要求1-6中任一项所述的数据竞争检测方法。
10.一种存储介质,其特征在于,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行如权利要求1-6中任一项所述的数据竞争检测方法。
CN201910354923.XA 2019-04-29 2019-04-29 一种数据竞争检测方法及装置 Active CN110083539B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910354923.XA CN110083539B (zh) 2019-04-29 2019-04-29 一种数据竞争检测方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910354923.XA CN110083539B (zh) 2019-04-29 2019-04-29 一种数据竞争检测方法及装置

Publications (2)

Publication Number Publication Date
CN110083539A CN110083539A (zh) 2019-08-02
CN110083539B true CN110083539B (zh) 2020-11-13

Family

ID=67417576

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910354923.XA Active CN110083539B (zh) 2019-04-29 2019-04-29 一种数据竞争检测方法及装置

Country Status (1)

Country Link
CN (1) CN110083539B (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103729290A (zh) * 2013-12-23 2014-04-16 华中科技大学 一种基于共享变量访问频度的采样率决策方法与系统
CN104077144A (zh) * 2014-07-07 2014-10-01 西安交通大学 基于多线程程序约束构建的数据竞争检测与证据生成方法
CN104657467A (zh) * 2015-02-11 2015-05-27 南京国电南自美卓控制系统有限公司 一种实时内存数据库的带订阅/发布的数据推送框架
CN104978272A (zh) * 2015-07-08 2015-10-14 中国科学院软件研究所 一种用于数据竞争检测的程序调度方法
CN106294169A (zh) * 2016-08-17 2017-01-04 华中科技大学 一种基于符号执行虚拟机的数据竞争检测与重放方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130275951A1 (en) * 2012-04-16 2013-10-17 International Business Machines Corporation Race detection for web applications

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103729290A (zh) * 2013-12-23 2014-04-16 华中科技大学 一种基于共享变量访问频度的采样率决策方法与系统
CN104077144A (zh) * 2014-07-07 2014-10-01 西安交通大学 基于多线程程序约束构建的数据竞争检测与证据生成方法
CN104657467A (zh) * 2015-02-11 2015-05-27 南京国电南自美卓控制系统有限公司 一种实时内存数据库的带订阅/发布的数据推送框架
CN104978272A (zh) * 2015-07-08 2015-10-14 中国科学院软件研究所 一种用于数据竞争检测的程序调度方法
CN106294169A (zh) * 2016-08-17 2017-01-04 华中科技大学 一种基于符号执行虚拟机的数据竞争检测与重放方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
同步容器类与并发容器类;QiaoZhi;《https://www.cnblogs.com/qlqwjy/p/10216358.html博客园》;20190103;第1-12页 *

Also Published As

Publication number Publication date
CN110083539A (zh) 2019-08-02

Similar Documents

Publication Publication Date Title
CN108089856B (zh) 一种页面元素的监听方法及装置
CN108268609B (zh) 一种文件路径的建立、访问方法和装置
CN104268229A (zh) 一种基于多进程浏览器的资源获得方法及装置
CN112181663A (zh) 一种内存调度方法、装置及计算机设备
US20120159515A1 (en) Sharing object representations
CN106648567B (zh) 数据获取方法及装置
CN110083539B (zh) 一种数据竞争检测方法及装置
CN107301097B (zh) 一种调用java对象、java对象的引用地址信息的存储方法及装置
CN109600272B (zh) 爬虫检测的方法及装置
CN108228332B (zh) 对象池访问方法及装置
CN110837446A (zh) 应用于嵌入式系统的设备管理方法及装置、介质以及嵌入式设备
EP2876557A1 (en) Detecting a read access to unallocated or uninitialized memory
CN108108258B (zh) 一种内存泄露的修复方法和装置
US9348667B2 (en) Apparatus for managing application program and method therefor
CN109582396B (zh) 一种任务状态处理方法、装置、系统及存储介质
CN106610833B (zh) 一种触发重叠html元素鼠标事件的方法及装置
CN114416442A (zh) 硬件变更的检测方法、装置、电子设备及可读存储介质
CN110908876B (zh) 一种硬件性能数据的获取方法及装置
CN109561121B (zh) 监控部署的方法及装置
CN108073581B (zh) 地图区域名称的显示方法及装置
US8359456B2 (en) Generating random addresses for verification of distributed computerized devices
CN110968888A (zh) 一种数据处理方法及装置
CN111625463B (zh) 一种程序状态检测方法和装置
CN111679815B (zh) 异步操作方法和装置、存储介质及相关设备
CN111352710A (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
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20210114

Address after: 510000 3108, 79 Wanbo 2nd Road, Nancun Town, Panyu District, Guangzhou City, Guangdong Province

Patentee after: GUANGZHOU CUBESILI INFORMATION TECHNOLOGY Co.,Ltd.

Address before: 28th floor, block B1, Wanda Plaza, Nancun Town, Panyu District, Guangzhou City, Guangdong Province

Patentee before: GUANGZHOU HUADUO NETWORK TECHNOLOGY Co.,Ltd.

TR01 Transfer of patent right
EE01 Entry into force of recordation of patent licensing contract
EE01 Entry into force of recordation of patent licensing contract

Application publication date: 20190802

Assignee: GUANGZHOU HUADUO NETWORK TECHNOLOGY Co.,Ltd.

Assignor: GUANGZHOU CUBESILI INFORMATION TECHNOLOGY Co.,Ltd.

Contract record no.: X2021440000053

Denomination of invention: A data competition detection method and device

Granted publication date: 20201113

License type: Common License

Record date: 20210208

TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20220107

Address after: 510000 3011, No. 79, Wanbo Second Road, Nancun Town, Panyu District, Guangzhou City, Guangdong Province

Patentee after: Guangzhou Jinhong network media Co.,Ltd.

Address before: 510000 3108, 79 Wanbo 2nd Road, Nancun Town, Panyu District, Guangzhou City, Guangdong Province

Patentee before: GUANGZHOU CUBESILI INFORMATION TECHNOLOGY Co.,Ltd.

TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20230625

Address after: Room 1801-1807, No. 362 East Hanxi Avenue, Nancun Town, Panyu District, Guangzhou City, Guangdong Province, 510000

Patentee after: GUANGZHOU CUBESILI INFORMATION TECHNOLOGY Co.,Ltd.

Address before: 510000 3011, No. 79, Wanbo Second Road, Nancun Town, Panyu District, Guangzhou City, Guangdong Province

Patentee before: Guangzhou Jinhong network media Co.,Ltd.