CN105074656B - 管理并发谓词表达式的方法和装置 - Google Patents
管理并发谓词表达式的方法和装置 Download PDFInfo
- Publication number
- CN105074656B CN105074656B CN201480008999.2A CN201480008999A CN105074656B CN 105074656 B CN105074656 B CN 105074656B CN 201480008999 A CN201480008999 A CN 201480008999A CN 105074656 B CN105074656 B CN 105074656B
- Authority
- CN
- China
- Prior art keywords
- thread
- condition
- meeting
- predicate
- hook
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3632—Software debugging of specific synchronisation aspects
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
公开了用于管理并发谓词表达式的方法、装置、***和制造品。一种示例方法公开了将第一条件钩子***到第一线程中,该第一条件钩子与第一条件相关联,将第二条件钩子***到第二线程中,该第二条件钩子与第二条件相关联,防止第二线程执行直到满足第一条件为止,以及当满足第二条件时识别并发违例。
Description
技术领域
本公开内容大体上涉及多线程调试,并且更特别地涉及管理并发谓词表达式的方法和装置。
背景技术
近年来,多核处理器已经存在于电子设备市场中以提高计算机、平板电脑、移动电话和/或车辆计算机***的性能。为了利用具有多个核和/或多个处理器的计算平台和/或设备,在这样的***/设备上执行的代码需要增加(例如,最大化)允许每个可用核或处理器独立于任何其它核或处理器来执行的机会。一些代码开发者和/或软件工程师把多核/多处理器代码开发称为并行编程。
附图说明
图1说明具有两个线程的示例伪代码程序。
图2是用于在多线程程序中识别并发违例的示例并发谓词表达式运算符以及对应定义的表。
图3说明使用并发谓词表达式来识别并发违例的具有两个线程的示例伪代码程序。
图4是用于在多线程程序中管理并发谓词表达式并且识别并发违例的示例并发谓词表达式运行时***的示意图。
图5是用于在多线程程序中管理对并发谓词表达式的监视的示例数据结构。
图6A、6B和7是表示可以被执行以管理并发谓词表达式的示例机器可读指令的流程图。
图8是示例处理器平台的框图,所述示例处理器平台可以执行图6A、6B和7的示例机器可读指令以实现图4的示例并发谓词表达式运行时***和图5的示例数据结构。
具体实施方式
示例计算平台包含诸如微处理器之类的中央处理单元(CPU),其与计算平台的一个或更多个存储器通信并且执行由软件(代码)规定的指令以执行一个或更多个计算任务。一些示例计算平台和/或设备在同一计算机***/设备中采用多个处理器(例如,CPU)。多个处理器中的每一个可以以独立于任何其它处理器的方式与存储器通信并且执行指令,从而当与仅具有单个处理器的计算平台/设备相比较时允许一个或更多个计算任务更快地被完成。一些示例处理器包含两个或更多个核,在这些核中每个核可以作为在单个物理处理器封装上所包含的单独的CPU进行操作,并且以独立于该处理器封装的其它核的方式执行指令。计算***和/或设备可以采用多个处理器和/或多个核的任何组合以增加可用CPU的数目,从而当与单个CPU***/设备相比较时提高***/设备性能。
经由多个处理器芯片和/或经由具有多个核的一个或更多个处理器芯片而采用多个CPU的设备和/或平台架构在并行编程适当地管理每个处理器/核时促进提高的性能。为了简短起见以及如在此所使用的,核可以指代单独的集成电路封装中的多个处理器和/或在单个物理处理器封装之内所包含的具有两个或更多个核的处理器。也为了简短起见,设备、平台和平台架构在此将可互换地被提到。虽然并行编程可以促进单独的核的同时使用,但是这样的并行编程可能导致非确定性问题。当程序针对在单独的核上的两个或更多个执行(例如,两个或更多个线程)具有同样的输入、但是结果不同时,该程序是非确定性的。在当在不同步的情况下两个或更多个线程访问相同存储单元并且所述访问中的至少一个是写操作时并行程序返回非确定性结果的时候,这样的状况特别明显。例如,当两个或更多个单独的线程在基本上相同的时间执行并且使用存储在共享存储器中的相同变量的时候。例如,第一线程可以计算变量的第一值。然而,由于第二线程正独立于第一线程执行,所以变量值可能随时被第二线程访问和处理(例如,改变)。因而,第一线程可以计算例如变量的为0的值、将结果存储在存储器中,并且然后第二线程可能将该变量作为除法运算的分母处理,从而引起平台的除以零的错误。
上面的示例识别许多状况之一,其中多线程程序的适当操作要求特定线程的一个或更多个操作相对于一个或更多个其它线程的操作按特定的次序来执行。例如,访问相同存储单元的两个或更多个示例线程可以依靠共享存储单元中存在的特定值以便防止平台的错误行为(例如,不正确的值、除以零错误等等)。与相对于单独线程指令的线程指令有关的错误在此被称为并发错误和/或并发违例。修复并发错误典型地包括当两个或更多个线程在平台上执行时重新产生对并发错误有责任的漏洞(bug)。在串行程序(即,仅使用一个线程执行的程序)的上下文中进行调试可以是相对直接的,因为顺序地步进通过代码行的过程最终揭示漏洞。另一方面,顺序地步进通过并行程序(其中两个或更多个线程是有效的)可能或者不能揭示基于第二或其它线程的漏洞。第一线程与第二线程之间的代码执行次序可能基于任何数目的因素而不同,所述因素诸如例如是线程初始化时间的相对差异和与可能引起不同执行持续时间的第一和/或第二线程相关联的不同输入。为了确保确定性并行程序执行,应用了同步技术的使用。例如,同步可以经由锁、事务、监视器、屏障(barriers)、互斥器等被采用。然而,当未使用同步时和/或当不正确地/不适当地使用同步时,可能导致非确定性。不是在每次执行程序(例如,代码块)时都出现的漏洞被称为非确定性的。
图1说明示例多线程应用100(以伪代码写的程序),其中并发地执行的线程可能导致平台故障。在图1的所说明示例中,第一线程102包括六(6)行代码(即,L1-L3和L7-L9),以及第二线程104包括三(3)行代码(即,L4-L6)。如果第一线程102首先开始执行,在行L1获取锁以防止一个或更多个其它线程(例如,第二线程104)在行L2访问变量y。在L3执行解锁操作以把对变量y的访问让给一个或更多个其它线程之前,在行L2计算变量y的值。然而,如果示例第一线程102计算出变量y的为零的值,则示例第二线程104将在行L5招致除以零错误。
上面的示例除以零并发漏洞特别难以检测,因为执行第一线程102和第二线程104的示例平台不可能总是以第一线程102的行L1开始。在一些示例中,第二线程104可以在第一线程102的任何代码之前开始执行,这在变量y的值为非零时不会导致除以零错误。在其它示例中,在第二线程104的行L4开始执行之前,所有的行L1-L3和L7-L9可以在第一线程102中执行,在该情况下除以零错误将不出现,因为当第一线程检测到零值时变量y的值被重新设定为1(见行L7-L9)。第一线程102和第二线程104可能不相对于彼此以同步方式执行,这可能导致在一些实例中但是不在其它实例中出现并发漏洞。在又一示例中,第一线程102和第二线程104可以相对于彼此以同步方式进行操作,其中calculate()总是返回0或者从不返回0,因此漏洞将总是出现或从不出现。
第一线程102与第二线程104之间的示例同步方式可以基于对应计算平台的同质和/或非瞬时条件(例如,所有平台输入都是静态的)而出现。在第一线程102和第二线程104在没有检测到和/或以别的方式观测到(多个)平台错误的情况下以相对同步的方式进行操作的这样的状况下,虚假的安全感可能导致不稳定代码的发布和/或部署。在其它示例中,与平台相关联的瞬时条件和/或输入、第一线程102和/或第二线程104可能引起并发漏洞的间歇性出现。
为了对多线程代码进行故障检修(调试),在此公开了将一个或更多个表达式***到代码中以测试并发违例的示例方法、装置、***和/或制造品。如在此所公开的,将并发谓词表达式(CPEs)***到正在经受评估的代码(例如,第一线程102和第二线程104)中以检测足以重新产生并发错误(漏洞)的条件。在一些状况下,在违例/漏洞(例如并发漏洞)出现之前必须满足特定条件的次序(并发),按该次序特定条件在此有时被称为先行***(happens-before relationships)。换言之,对于要出现并发漏洞必须满足来自第一线程(例如,第一线程102)和第二线程(例如第二线程104)的条件的时间次序。所要求的条件被称为谓词,所述谓词是返回真或假的布尔条件。CPE的表达式反映一组有序的谓词。
示例CPE可以由编译器转换为可执行代码和/或指令以控制多线程程序的线程的调度和/或定位出现违例的代码的部分。在图2的所说明示例中,示出了具有不同运算符的几个示例CPE定义200。第一示例表达式202(p1<p2)包括第一谓词p1、第二谓词p2和运算符“<”。第一示例表达式202说明谓词p1必须在p2满足之前被满足。换言之,与第一谓词p1相关联的布尔条件(例如,变量y==0)必须在时间上早于与第二谓词p2相关联的布尔条件。另外,在此所公开的示例方法、装置、***和/或制造品将不注意p2的状态除非并且直到满足p1。
第二示例表达式204(p1 <& p2)也包括第一谓词p1和第二谓词p2,以及包括运算符“<&”。第二示例表达式204说明谓词p1必须在p2满足之前被满足,并且必须保持为真直到满足p2的时刻。第三示例表达式206(p1 && p2)说明互反并发表达式,其中(1)p1被满足并且保持为真直到p2被满足为止,或者(2)p2被满足并且保持为真直到p1出现并且被满足为止。第四示例表达式208(p1 || p2)说明互反非并发表达式,其中或者满足p1或者满足p2。第五示例表达式210(p1 # N)说明如下表达式,其中必须满足p1由整数N所指示的阈值次数的。第六示例表达式212(p1ΛΝ)说明如下表达式,其中并发地满足p1阈值次数。
为了说明CPE的利用,图3说明基本上与图1的示例多线程应用100相同的示例多线程应用300(例如,程序)。在图3的所说明示例中,第一线程302和第二线程304包括标明L1至L9的代码行。虽然第一线程302和第二线程304的代码在执行之前由编译器来编译,但是示例辅助文件306包括未编译的CPE 308。作为替代,响应于对指令310进行解析来解析示例辅助文件306,如下面更详细地描述的。在确认漏洞的出现之前示例CPE 308指示第一谓词p1必须在第二谓词p2之前被满足。
如果漏洞被认为位于第一线程302中,则在行L5***示例第一CPE钩子312(条件钩子),以及如果漏洞被认为位于第二线程304中,则在行L4***示例第二CPE钩子314(条件钩子)。示例第一CPE钩子312与谓词p1相关联,而示例第二CPE钩子314与谓词p2相关联。持有调试代码责任的软件工程师和/或任何其它人员或实体可能不知道潜在的代码漏洞/违例是否要求特定次序和/或并发关系。因此,辅助文件306中的示例CPE 308(p1 <& p2)指示谓词P1必须被满足并且保持为真直到满足谓词p2为止。尽管示例CPE 308可能不反映引起漏洞所要求的正确条件,但是在示例辅助文件306中可以更改和/或以别的方式替换CPE 308,使得替代并发测试可以在不需要重新编译示例第一线程302或示例第二线程304的情况下出现。
在操作中,如果第一线程302开始执行,则在行L1获得锁以防止第二线程304(或者任何其它线程)访问变量y(见行L2)所位于的共享存储器。示例第一线程302在行L2计算变量y的值,以及在行L3释放锁以允许任何其它线程访问与变量y相关联的共享存储器。对行L5进行评估并且由于它与谓词p1相关联,所以基于示例辅助文件306的示例CPE 308来评估与p1相关联的条件。为了此示例的目的,假定在第一线程302的行L2中变量y的计算导致为0的值。在此示例场景中,第一CPE钩子312确认y==0的条件为真,从而允许对第二线程304的第二CPE钩子314进行评估。然而,由于示例CPE 308指示谓词p1不仅必须在谓词p2之前为真,而且必须保持为真直到谓词p2被评估为真为止,所以如果变量y的值从零变为非零值,则在此所公开的示例方法、装置、***和制造品将禁止对谓词p2的条件进行评估。
继续上面的示例,第一CPE钩子312促使第一线程302停止,使得可以在第二线程304中评估第二谓词p2。在图3的所说明示例中,第二线程304在行L3获取锁以防止任何其它线程访问与变量y相关联的存储单元,并且然后在第二CPE钩子314处评估第二谓词p2的条件。在此示例中,由于变量y的值为零,所以第二谓词p2为真并且示例CPE 308被认为被满足。作为满足示例CPE 308的结果,可以调用报警消息和/或其它异常以警告软件工程有并发违例及其相对于第一线程302和第二线程304的对应位置。当这样的状况由在此所公开的示例方法、装置、***和/或制造品识别出时,软件工程师可以识别可以被作出以防止并发错误的对示例多线程应用300的一个或更多个改变。在图3的示例多线程应用300中,软件工程师现在可以识别:在行L2与L3之间重新定位第一线程302的行L7-L9将防止除以零错误在将来出现。
图4说明示例CPE运行时(RT)先行发生(HB)***400,在下文中称为CPR-RT***400。在图4的所说明示例中,CPE-RT***400包括能够执行一个或更多个线程404的计算***402,其中一个或更多个线程404中的每一个可以包括CPE钩子406。虽然示例计算***402经由通信总线410以通信方式连接至CPE引擎408,但是示例CPE引擎可以替代地作为计算***402的一部分进行操作。示例CPE引擎包括以通信方式连接至一个或更多个CPE辅助文件414的CPE解析器412,其中每个CPE辅助文件414可以包括一个或更多个表达式字符串416(例如,p1 <& p2 < p3 && p4)。示例CPE引擎408还包括序列计数管理器418、关系数据结构管理器420、结合分析器422、线程监视器424、谓词状态分析器426以及线程定时引擎428。
在操作中,示例CPE-RT***400既(a)构建指示谓词满足状态的一个或更多个数据结构又(b)针对谓词状态信息监视一个或更多个线程404。如果CPE辅助文件414可用和/或否则先前未评估,则示例CPE解析器412评估CPE辅助文件414。在对示例CPE辅助文件414进行解析时,示例CPE解析器412在与辅助文件414相关联的表达式字符串416中识别谓词,以及示例序列计数管理器418识别给定字符串的每个所识别谓词的对应次序。在图4的所说明示例中,示例表达式字符串416中的第一谓词为p1,第二谓词为p2,第三谓词为p3以及第四谓词为p4。
示例关系数据结构管理器420基于可用的表达式字符串生成关系数据结构,以及示例关系数据结构500在图5中被示出。在图5的所说明示例中,关系数据结构识别要被满足的谓词、要满足谓词所按的次序、以及满足还是不满足(未满足)每个谓词状态。换言之,示例关系数据结构500表示谓词状态结构,该谓词状态结构示出要满足的谓词以及谓词当前是否按指示表达式字符串(例如,表达式字符串416)的次序被满足。示例谓词状态结构500包括次序列502、谓词名列504、谓词值列506、并发标志列508、并发值列510以及满足状态列512。
示例谓词状态结构500由示例关系数据结构管理器420生成以允许针对并发违例实例监视示例计算***402的一个或更多个线程404的一个或更多个CPE钩子406。换言之,示例谓词状态结构500作为有序谓词及它们的对应满足状态的路线图而操作。如果示例谓词状态结构500未完全被满足,则由示例计算***402执行的对应多线程程序(例如,线程404)被认为无漏洞。然而,只是因为示例线程404的一次或更多次迭代不导致一个或更多个并发违例不指示无漏洞代码。如上面以及下面更详细地描述的,可能不基于例如多线程应用之内相对的线程执行次数来引起一个或更多个并发违例。
在示例序列计数管理器418为给定谓词(例如,与要被满足的第一谓词相关联的p1)识别序列次序之后,示例结合分析器422确定第一谓词与后续谓词之间的序列关系的类型。在图4的所说明示例中,结合分析器422从示例表达式字符串416中识别 “<&”运算以指示p1直接在谓词p2之前要被满足,以及p1必须保持在其满足状态(例如,具有对应值y==0)上并且直到谓词p2被满足为止。示例CPE解析器412然后确定在示例表达式字符串中一个或更多个附加谓词是否继续存在,并且如果是这样的话,则把下一个可用序列号归于后续谓词。在示例谓词状态结构500用有序的谓词集、它们的与后续谓词相关联的关系、所要求的并发行为和对应并发值填充之后,示例线程监视器424针对执行实例监视示例线程404。
如果示例线程监视器424检测到示例线程404正执行,线程监视器424设定谓词指针以确定哪个谓词要求满足。例如,示例线程监视器424可以将指针设定为值一以指示第一谓词尚未被确认为满足,但是因为在示例状态结构500中p1是第一谓词,所以可以不评估后续线程直到满足谓词p1为止。当示例谓词状态分析器426确定满足谓词p1(例如,因为在与谓词p1相关联的CPE钩子处y==0)时,示例关系数据结构管理器420用满足指示(例如,“真”、“1”、“T”等)来更新示例满足列512。
对于在前谓词值必须被满足并且保持满足(例如,p1 <& p2)的状况,于是示例谓词状态分析器426监视先前满足的谓词以验证其状态没有改变和/或以别的方式被更改。如果其改变和/或以别的方式被更改,诸如如果在第一CPE钩子312被认为满足之后、但是在可以评估第二CPE钩子314之前图3的示例多线程应用300中y的值从零值改变为非零值,则示例关系数据结构管理器420从满足列512移除满足指示(例如,“真”、“1”、“T”等)并且用不满足指示(例如,“假”、“0”、“F”等)来替换它。另外,示例谓词状态分析器426将其指针值返回到与未满足谓词相关联的值以允许针对适当的谓词序列监视线程404。
当示例线程监视器424针对谓词满足的另一实例(例如,变量y的值从非零值切换到零值)返回监视线程404时,示例线程定时引擎428可以在允许示例线程404中的一个或更多个再次执行之前将睡眠值应用于示例线程404中的一个或更多个。如上所述,一些多线程程序可能不展现并发违例,因为各个线程执行之间的相对定时不引起这样的错误条件。同样地,示例线程定时引擎428可以应用睡眠值以使线程404中的一个或更多个的发起错开一持续时间值(例如,恒定值、随机值)来试图要在这一个或更多个线程中注入定时变化。这样的延迟持续时间值(睡眠值)可以被应用于执行线程404中的仅仅一个线程,执行线程404中的多个线程或执行线程中的所有线程可以同样地经受延迟持续时间值。
虽然在图6A、6B和7中说明了实现图4和5的CPR-RT***400的示例方式,但是可以以任何其它方式对图6A、6B和7中所说明的元素、过程和/或设备中的一个或更多个进行组合、划分、重新布置、省略、消除和/或实现。此外,示例计算***402、示例CPE引擎408、示例CPE解析器412、示例CPE辅助文件414、示例表达式字符串416、示例序列计数管理器418、示例关系数据结构管理器420、示例结合分析器422、示例线程监视器424、示例谓词状态分析器426、示例线程定时引擎428和/或更一般地图4和5的示例CPE-RT***400和示例谓词状态结构500可以由硬件、软件、固件和/或硬件、软件和/或固件的任何组合来实现。 因而,例如,示例计算***402、示例CPE引擎408、示例CPE解析器412、示例CPE辅助文件414、示例表达式字符串416、示例序列计数管理器418、示例关系数据结构管理器420、示例结合分析器422、示例线程监视器424、示例谓词状态分析器426、示例线程定时引擎428和/或更一般地示例CPE-RT***400和示例谓词状态结构500中的任何一个可以由一个或更多个电路、(多个)可编程处理器、(多个)专用集成电路(ASIC)、 (多个)可编程逻辑设备(PLD)和/或(多个)现场可编程逻辑设备(FPLD)等来实现。当读取覆盖纯软件和/或固件实现方案的此专利的装置或***权利要求中的任何一个时,据此将示例计算***402、示例CPE引擎408、示例CPE解析器412、示例CPE辅助文件414、示例表达式字符串416、示例序列计数管理器418、示例关系数据结构管理器420、示例结合分析器422、示例线程监视器424、示例谓词状态分析器426、示例线程定时引擎、示例CPE-RT***400、和/或示例谓词状态结构500中的至少一个明确限定为包括存储软件和/或固件的有形计算机可读存储设备或存储盘,诸如存储器、DVD、CD、蓝光光碟等。更进一步地,图4和5的示例CPE-RT***400和/或示例谓词状态结构500可以包括除了或代替图4和5中所说明的那些之外的一个或更多个元素、过程和/或设备,和/或可以包括所说明的元素、过程和设备中的任何或所有中的一个以上。
表示用于实现图4和5的CPE-RT***400和/或示例谓词状态结构500的示例机器可读指令的流程图在图6A、6B和7中被示出。在此示例中,机器可读指令包括用于由诸如在下面结合图8所论述的示例处理器平台800中所示出的处理器812之类的处理器执行的程序。该程序可以体现在存储在有形计算机可读存储介质上的软件中,其中有形计算机可读存储介质诸如是CD-ROM、软盘、硬盘驱动器、数字多用途盘(DVD)、蓝光光盘、或与处理器812相关联的存储器,但是整个程序和/或其部分替代地可以由除了处理器812之外的设备执行和/或体现在固件或专用硬件中。此外,尽管参考图6A、6B和7中所说明的流程图描述了示例程序,但是替代地可以使用实现示例CPE-RT***400和/或示例谓词状态结构500的许多其它方法。例如,块的执行次序可以被改变,和/或可以对所描述的块中的一些块进行改变、消除或组合。
如上所提及的,图6A、6B和7的示例过程可以使用存储在有形计算机可读存储介质上的编码指令(例如,计算机和/或机器可读指令)来实现,有形计算机可读存储介质诸如是硬盘驱动器、快闪存储器、只读存储器(ROM)、光盘(CD)、数字多用途盘(DVD)、高速缓存、随机存取存储器(RAM)和/或任何其它存储设备或存储盘,在任何其它存储设备或存储盘中信息在任何持续时间内(例如,在扩展的时间段内、永久地、为了短暂的实例、为了临时缓冲、和/或为了信息的高速缓存)被存储。如在此所使用的,术语有形计算机可读存储介质被明确限定为包括任何类型的计算机可读存储设备和/或存储盘以及排除传播信号。如在此所使用的,“有形计算机可读存储介质”和“有形机器可读存储介质”可互换地使用。另外或替代地,图6A、6B和7的示例过程可以使用存储在永久计算机和/或机器可读介质上的编码指令(例如,计算机和/或机器可读指令)来实现,所述永久计算机和/或机器可读介质诸如是硬盘驱动器、快闪存储器、只读存储器、光盘、数字多用途盘、高速缓存、随机存取存储器和/或任何其它存储设备或存储盘,在任何其它存储设备或存储盘中信息在任何持续时间内(例如,在扩展的时间段内、永久地、为了短暂的实例、为了临时缓冲、和/或为了信息的高速缓存)被存储。如在此所使用的,术语永久计算机可读介质被明确限定为包括任何类型的计算机可读设备或盘以及排除传播信号。如在此所使用的,当在权利要求的前序部分中把短语“至少”用作过渡术语时,它以与术语“包括”为开放式相同的方式为开放式的。
图6A的程序开始于块600,其中示例CPE解析器412确定一个或更多个示例CPE辅助文件414是否可用。如果不可用,则示例CPE解析器412等待直到一个或更多个文件414可用,否则示例CPE解析器412确定来自示例CPE辅助文件414的谓词是否是集合中的第一谓词(块602)。如果是这样的话,则示例序列计数管理器418将第一谓词与相关联的序列计数1相关联(块604)。另外,示例序列计数管理器418将下一个谓词与该序列计数的下一个最高可用值相关联(块606)(例如,计数=计数+1),使得集合中的每个谓词具有相关联的计数值,其指示引起违例的所要求的满足次序。示例关系数据结构管理器420配置关系数据结构(块608),诸如结合图5所描述的示例谓词状态结构500。
图6B包括与配置关系数据结构(块608)相关联的附加细节。 在图6B的所说明示例中,示例结合分析器422确定来自示例CPE辅助文件414的运算符是否与并发关系相关联(块650)。如果是这样的话,则示例关系数据结构管理器420更新示例谓词状态结构500的并发标志以反映谓词满足的任何先行发生时间要求(块652)。如上面结合图2所描述的,并发关系可以经由示例运算符/结合“<&”来识别。如果示例结合分析器422确定来自示例CPE辅助文件414的运算符不与并发关系相关联(块650),则示例结合分析器确定该运算符是否与非并发有序关系相关联(块654)。如果是这样的话,则示例关系数据结构管理器420更新示例谓词状态结构500的并发标志以反映具有次序要求的非并发关系(块656)。
如果示例结合分析器422确定来自示例CPE辅助文件414的运算符不与非并发有序关系相关联(块654),则示例结合分析器422确定该运算符是否与互反次序的并发关系相关联(块658)。如上所述,互反并发表达式使用运算符“&&”。如果是这样的话,则示例关系数据结构管理器420更新示例谓词状态结构500的并发标志以反映互反并发关系(块660)。如果示例结合分析器422确定来自示例CPE辅助文件414的运算符不与互反并发关系相关联(块658),则示例结合分析器422确定该运算符是否与非并发互反关系相关联(块662)。如上所述,示例互反非并发表达式使用运算符“||”。如果是这样的话,则示例关系数据结构管理器420更新示例谓词状态结构500的并发标志以反映互反非并发关系(块664)。
如果示例结合分析器422确定来自示例CPE辅助文件414的运算符不与互反非并发关系相关联(块662),则示例结合分析器422确定该运算符是否与非并发阈值计数关系相关联(块666)。如上所述,示例非并发阈值计数关系通过使用运算符“#”来识别。如果是这样的话,则示例关系数据结构管理器420更新并发标志以反映阈值的非并发迭代(块668)。如果示例结合分析器422确定来自示例CPE辅助文件414的运算符不与非并发阈值计数关系相关联(块666),则示例结合分析器422响应于识别出运算符“Λ”来确定该运算符与并发阈值关系相关联,以及示例关系数据结构管理器420更新谓词状态结构500以反映需要对特定谓词的阈值数目的并发实例进行计数(块670)。
如果在示例表达式字符串416中存在由运算符分开的附加谓词对(块672)(例如,p3 && p4),则示例序列计数管理器418识别相关联的接下去的序列计数值(块674)。例如,鉴于示例表达式字符串416,如果第一对谓词p1和p2已经相对于彼此被评估,则它们的对应序列计数值分别是“1”和“2”,使后续序列计数值“3”和“4”用于谓词p3和p4。然后控制前进到图6A的块606。另一方面,如果已经评估了完整的谓词集和相关联的结合(块672),则该程序结束以允许发生示例谓词状态结构500的运行时评估。
图7说明通用运行时程序700,用于鉴于所配置的谓词状态结构500评估要评估的多线程应用中的一个或更多个线程。 在图7的所说明示例中,示例关系数据结构管理器420在执行正在经受评估的示例计算***402的一个或更多个线程404之前初始化示例谓词状态结构500的状态标志(块702)。状态标志的初始化(块702)可以通过将示例满足状态列512的所有值设定为“不满足”指示(例如,“假”、“不满足”、“0”等)而发生。在一些示例中,示例满足状态列512中的值可以设定为“TBD”以指代“待确定”的状态。如果示例线程监视器424确定没有一个线程404正在执行(块704),则示例程序700等待,否则示例线程监视器424将谓词指针p设定为待评估的第一谓词的值(例如,指针p==1)(块706)。
示例谓词状态分析器426针对实例监视感兴趣的谓词(例如,与指针p===1相关联的谓词p1)何时被满足(例如谓词p1=0)(块708)。示例程序700等待直到满足感兴趣的谓词(块708)为止,以及当满足感兴趣的谓词(块708)时,示例关系数据结构管理器420将满足状态列512从例如“TBD”改变为“TRUE(真)”(块710)。然而,因为一些并发违例依赖于在前谓词状态被维持直到满足后续状态为止(例如,p1 <& p2),于是示例谓词状态分析器420确定任何先前的谓词是否具有改变的状态(块712)。即使在前谓词具有改变的状态,如由示例谓词状态分析器426所确定的(块712),示例谓词状态分析器426还通过引用相关谓词对之间的结合确定这样的状态改变是否影响以下确定:并发违例是否为真(块714)。例如,有序的但不是并发的谓词表达式(例如,p1 < p2)可以在不影响识别并发违例的要求的情况下回复到任何值。另一方面,有序的且并发的谓词表达式(例如,p1 <& p2)必须维持它们的满足状态直到满足下一个谓词为止。换言之,如果响应于变量值等于零(例如y==0)而首先满足谓词p1,则该变量必须保持其零值直到满足谓词p2的条件为止。
如果示例谓词状态分析器426确定不再满足先前满足的谓词(块714),则示例关系数据结构管理器420修改满足状态列512以反映不满足先前的谓词(块716)(例如,“TBD”、“FALSE(假)”、“0”等)。示例谓词状态分析器426将谓词指针重新设定为与该不再被满足的谓词相关联的值(块718),使得不按顺序地不对可能在示例表达式字符串416的后续谓词进行评估。如果没有一个先前满足的谓词具有改变的状态(块712),则示例谓词状态分析器426将谓词指针设定到用于评估的谓词序列中的下一个值(块720)(例如,p=p+1)。示例关系数据结构管理器420确定是否示例谓词状态结构500中的所有谓词都已经被满足(块722)以及,如果是这样的话,则示例CPE引擎408报告已经出现并发违例(块724)。
如果示例关系数据结构管理器420确定示例谓词状态结构500中的所有谓词未被满足(块722),则示例线程定时引擎428应用线程重新开始延迟因子(块726)。如上所述,在一些状况下,两个或更多个线程可以以相对时间同步性执行,该相对时间同步性(a)总是导致并发违例,(b)从不引起并发违例或(c)间歇性地引起并发违例。为了暴露隐藏并发违例可能性的这种状况的潜在性,示例线程定时引擎428向一个或更多个线程应用在允许所述一个或更多个线程开始执行之前到期的延迟值。在一些示例中,延迟值是随机的,从而允许一个或更多个线程404在迭代之间相对于彼此在不同的时间开始执行。线程中的每一个线程的这样的随机开始时间可以暴露出现并发违例的一个或更多个状况,从而允许评估和/或改变代码的特定部分以防止这样的违例在将来出现。
图8是能够执行图6A、6B和7的指令以实现图4和5的装置的示例处理器平台800的框图。 处理器平台800例如可以是服务器、个人计算机、移动设备(例如,诸如iPadTM之类的平板电脑)、个人数字助理(PDA)、因特网装置、游戏控制台、机顶盒、或任何其它类型的计算设备。
所说明示例的处理器平台800包括处理器812。所说明示例的处理器812是硬件。例如,处理器812可以由来自任何期望族系或制造商的一个或更多个集成电路、逻辑电路、微处理器或控制器来实现。
所说明示例的处理器812包括本地存储器813(例如,高速缓存)。所说明示例的处理器812与包括易失性存储器814和非易失性存储器816的主存储器经由总线818通信。易失性存储器814可以由同步动态随机存取存储器(SDRAM)、动态随机存取存储器(DRAM)、RAMBUS动态随机存取存储器(RDRAM)和/或任何其它类型的随机存取存储设备来实现。非易失性存储器816可以由快闪存储器和/或任何其它期望类型的存储设备来实现。对主存储器814、816的访问由存储器控制器控制。
所说明示例的处理器平台800还包括接口电路820。接口电路820可以通过任何类型的接口标准、诸如以太网接口、通用串行总线(USB)、和/或PCI特快(express)接口来实现。
在所说明的示例中,一个或更多个输入设备822连接到接口电路820。(多个)输入设备允许用户将数据和命令输入处理器812中。(多个)输入设备可以例如由键盘、按钮、鼠标、触摸屏、跟踪板、跟踪球、等点(isopoint)和/或声音识别***来实现。
一个或更多个输出设备824也连接到所说明示例的接口电路820。输出设备824可以例如通过显示设备(例如,发光二极管(LED)、有机发光二极管(OLED)、液晶显示器、阴极射线管显示器(CRT)、触摸屏、触觉输出设备、发光二极管(LED)、打印机和/或扬声器)来实现。所说明示例的接口电路820因而典型地包括图形驱动器卡。
所说明示例的接口电路820还包括诸如发送器、接收器、收发器、调制解调器和/或网络接口卡之类的通信设备,以促进经由网络826(例如以太网连接、数字用户线(DSL)、电话线、同轴电缆、蜂窝电话***等)与外部机器(例如,任何种类的计算设备)的数据交换。
所说明示例的处理器平台800还包括用于存储软件和/或数据的一个或更多个大容量存储设备828。这样的大容量存储设备828的示例包括软盘驱动器、硬驱动器盘、光盘驱动器、蓝光光盘驱动器、RAID***和数字多用途盘(DVD)驱动器。
图6A、6B和7的编码指令832可以存储在大容量存储设备828中、在易失性存储器814中、在非易失性存储器816中、和/或在诸如CD或DVD之类的可移动有形计算机可读存储介质中。
根据前述内容,将理解上面所公开的方法、装置和制造品以暴露并发违例的方式促进多线程程序调试。另外,如果关于并发违例的初始假定经由一个或更多个CPE辅助文件414是不正确的,则可以改变这样的文件以在不需要代码重新编译努力的情况下搜索不同的并发违例模式。
公开了用于管理并发谓词表达式的方法、装置、***和制造品。一些所公开的示例方法包括将第一条件钩子***到第一线程中,第一条件钩子与第一条件相关联,将第二条件钩子***到第二线程中,第二条件钩子与第二条件相关联,防止第二线程执行直到满足第一条件为止,以及当满足第二条件时识别并发违例。其它所公开的示例方法包括还通过仅当满足第一条件时才允许第二线程执行来防止第二线程执行直到满足第一条件为止。一些所公开示例方法包括当在满足第二条件之前不满足第一条件时防止第二线程执行以及重新发起第一线程。还有其它示例方法包括当按第一次序满足第一条件和第二条件时第一条件和第二条件指示并发错误,以及其中第一次序包括第一条件在第二条件之前被满足以及保持满足直到满足第二条件为止。还有所公开的其它示例方法包括在不重新编译第一线程和第二线程的情况下改变第一条件和第二条件的满足次序。一些所公开的示例方法还包括当在不满足第一条件或第二条件的情况下第一或第二线程执行时应用线程重新开始延迟,以及其中线程重新开始延迟包括针对第一线程或第二线程中的至少一个的随机持续时间。所公开的其它示例方法包括响应于经由与错误位置信息相关联的报警消息识别出并发违例来调用报警消息。
用于检测并发违例的示例装置包括:并发谓词表达式(CPE)引擎,用于将第一条件钩子***到与第一条件相关联的第一线程中,以及将第二条件钩子***到与第二条件相关联的第二线程中;线程监视器,用于防止第二线程执行直到满足第一条件为止;以及谓词状态分析器,用于在满足第二条件时识别并发违例。其它所公开的示例装置包括线程监视器,用于通过仅当满足第一条件时才允许第二线程执行来防止第二线程执行直到满足第一条件为止。还有所公开的其它示例装置包括线程监视器,用于当在满足第二条件之前不满足第一条件时防止第二线程执行以及重新发起第一线程。一些所公开的示例装置包括序列计数管理器,用于当按第一次序满足第一条件和第二条件时识别并发错误,其中序列计数管理器是用于将第一次序识别为第一条件在第二条件之前被满足以及识别第一条件保持满足直到满足第二条件为止。所公开的其它示例装置包括CPE解析器,用于在不重新编译第一线程和第二线程的情况下检测第一条件和第二条件的满足次序的改变。所公开的一些示例装置包括线程定时引擎,用于当在不满足第一条件或第二条件的情况下第一或第二线程被执行时应用线程重新开始延迟,其中线程定时引擎是用于应用针对第一线程或第二线程中的至少一个的随机持续时间。所公开的其它示例装置包括谓词状态分析器,用于响应于识别何时满足第二条件来调用与错误位置信息相关联的报警消息。
所公开的一些示例机器可读存储介质包括指令,所述指令在被执行时促使机器将第一条件钩子***到第一线程中,第一条件钩子与第一条件相关联,将第二条件钩子***到第二线程中,第二条件钩子与第二条件相关联,防止第二线程执行直到满足第一条件为止,以及当满足第二条件时识别并发违例。其它所公开的示例机器可读存储介质包括指令,所述指令用于促使机器通过仅当满足第一条件时才允许第二线程执行来防止第二线程执行直到满足第一条件为止,以及用于促使机器当在满足第二条件之前不满足第一条件时防止第二线程执行以及重新发起第一线程。还有所公开的其它示例机器可读存储介质包括指令,其促使机器在按第一次序满足第一条件和第二条件时识别并发错误,以及促使机器识别第一条件在第二条件之前被满足,同时第一条件保持满足直到满足第二条件为止。所公开的一些示例机器可读存储介质包括指令,其促使机器在不重新编译第一线程和第二线程的情况下改变第一条件和第二条件的满足次序。所公开的其它示例机器可读存储介质包括指令,其促使机器在不满足第一条件或第二条件的情况下第一或第二线程执行时应用线程重新开始延迟,以及促使机器应用针对第一线程或第二线程中的至少一个的随机持续时间。所公开的其它示例机器可读存储介质包括调用与错误位置信息相关联的报警消息。
尽管在此已经描述了确定的示例方法、装置和制造品,但是此专利的覆盖范围并不限于此。相反,此专利公平地覆盖落入此专利的权利要求书的范围内的所有方法、装置和制造品。
Claims (26)
1.一种用于检测并发违例的方法,包括:
将第一条件钩子***到第一线程中,所述第一条件钩子位于第一线程的编译代码中并且与由所述第一线程的编译代码外部的非编译指令定义的第一条件相关联;
将第二条件钩子***到第二线程中,所述第二条件钩子位于第二线程的编译代码中并且与由所述第二线程的编译代码外部的非编译指令定义的第二条件相关联;
防止所述第二线程执行直到满足所述第一条件为止;以及
当满足所述第二条件时识别并发违例。
2.如权利要求1中所限定的方法,其中,防止所述第二线程执行直到满足所述第一条件为止还包括仅当满足所述第一条件时才允许所述第二线程执行。
3.如权利要求2中所限定的方法,还包括:当在满足所述第二条件之前不满足所述第一条件时,防止所述第二线程执行以及重新发起所述第一线程。
4.如权利要求1中所限定的方法,其中,当按第一次序满足所述第一条件和所述第二条件时所述第一条件和所述第二条件指示并发错误。
5.如权利要求4中所限定的方法,其中,所述第一次序包括所述第一条件在所述第二条件之前被满足以及保持满足直到满足所述第二条件为止。
6.如权利要求1中所限定的方法,还包括:在不重新编译所述第一线程和所述第二线程的情况下改变所述第一条件和所述第二条件的满足次序。
7.如权利要求1中所限定的方法,还包括:当在不满足所述第一条件或所述第二条件的情况下所述第一线程或所述第二线程执行时应用线程重新开始延迟。
8.如权利要求7中所限定的方法,其中,所述线程重新开始延迟包括针对所述第一线程或所述第二线程中的至少一个的随机持续时间。
9.如权利要求1或2中所限定的方法,还包括:在所述第二线程正在执行时识别从满足到不满足的第一线程状态改变。
10.一种用于检测并发违例的装置,包括:
并发谓词表达式引擎,用于将位于第一线程的编译代码中并且与由所述第一线程的编译代码外部的非编译指令定义的第一条件相关联的第一条件钩子***到第一线程中,以及将位于第二线程的编译代码中并且与由所述第二线程的编译代码外部的非编译指令定义的第二条件相关联的第二条件钩子***到第二线程中;
线程监视器,用于防止所述第二线程执行直到满足所述第一条件为止;以及
谓词状态分析器,用于在满足所述第二条件时识别并发违例。
11.如权利要求10中所限定的装置,其中,所述线程监视器通过仅当满足所述第一条件时才允许所述第二线程执行来防止所述第二线程执行直到满足所述第一条件为止。
12.如权利要求11中所限定的装置,其中,所述线程监视器当在满足所述第二条件之前不满足所述第一条件时防止所述第二线程执行以及重新发起所述第一线程。
13.如权利要求10中所限定的装置,还包括:序列计数管理器,用于当按第一次序满足所述第一条件和所述第二条件时识别并发错误。
14.如权利要求13中所限定的装置,其中,所述序列计数管理器将所述第一次序识别为所述第一条件在所述第二条件之前被满足,以及识别所述第一条件保持满足直到满足所述第二条件为止。
15.如权利要求10中所限定的装置,还包括:并发谓词表达式解析器,用于在不重新编译所述第一线程和所述第二线程的情况下检测所述第一条件和所述第二条件的满足次序的改变。
16.如权利要求10中所限定的装置,还包括:线程定时引擎,用于当在不满足所述第一条件或所述第二条件的情况下所述第一线程或所述第二线程执行时应用线程重新开始延迟。
17.如权利要求16中所限定的装置,其中,所述线程定时引擎应用针对所述第一线程或所述第二线程中的至少一个的随机持续时间。
18.如权利要求10或11中所限定的装置,还包括:所述线程监视器在所述第二线程正在执行时识别所述第一线程的从满足改变为不满足的状态。
19.一种有形机器可读存储介质,包括指令,所述指令在被执行时促使机器至少:
将第一条件钩子***到第一线程中,所述第一条件钩子位于第一线程的编译代码中并且与由所述第一线程的编译代码外部的非编译指令定义的第一条件相关联;
将第二条件钩子***到第二线程中,所述第二条件钩子位于第二线程的编译代码中并且与由所述第二线程的编译代码外部的非编译指令定义的第二条件相关联;
防止所述第二线程执行直到满足所述第一条件为止;以及
当满足所述第二条件时识别并发违例。
20.如权利要求19中所限定的机器可读存储介质,其中,所述指令在被执行时促使机器通过仅当满足所述第一条件时才允许所述第二线程执行来防止所述第二线程执行直到满足所述第一条件为止。
21.如权利要求20中所限定的机器可读存储介质,其中,所述指令在被执行时促使机器当在满足所述第二条件之前不满足所述第一条件时防止所述第二线程执行以及重新发起所述第一线程。
22.如权利要求21中所限定的机器可读存储介质,其中,所述指令在被执行时促使机器当按第一次序满足所述第一条件和所述第二条件时识别并发错误。
23.如权利要求22中所限定的机器可读存储介质,其中,所述指令在被执行时促使机器识别所述第一条件在所述第二条件之前被满足,同时所述第一条件保持满足直到满足所述第二条件为止。
24.如权利要求19中所限定的机器可读存储介质,其中,所述指令在被执行时促使机器在不重新编译所述第一线程和所述第二线程的情况下改变所述第一条件和所述第二条件的满足次序。
25.如权利要求19中所限定的机器可读存储介质,其中,所述指令在被执行时促使机器当在不满足所述第一条件或所述第二条件的情况下所述第一线程或所述第二线程执行时应用线程重新开始延迟。
26.如权利要求25中所限定的机器可读存储介质,其中,所述指令在被执行时促使机器应用针对所述第一线程或所述第二线程中的至少一个的随机持续时间。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/827,121 US9117021B2 (en) | 2013-03-14 | 2013-03-14 | Methods and apparatus to manage concurrent predicate expressions |
US13/827121 | 2013-03-14 | ||
PCT/US2014/011424 WO2014143391A1 (en) | 2013-03-14 | 2014-01-14 | Methods and apparatus to manage concurrent predicate expressions |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105074656A CN105074656A (zh) | 2015-11-18 |
CN105074656B true CN105074656B (zh) | 2018-06-01 |
Family
ID=51534665
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201480008999.2A Active CN105074656B (zh) | 2013-03-14 | 2014-01-14 | 管理并发谓词表达式的方法和装置 |
Country Status (4)
Country | Link |
---|---|
US (2) | US9117021B2 (zh) |
EP (1) | EP2972796A4 (zh) |
CN (1) | CN105074656B (zh) |
WO (1) | WO2014143391A1 (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104220989B (zh) | 2011-12-21 | 2017-12-12 | 英特尔公司 | 用于识别并且再现多线程程序中并发冲突的方法及*** |
US9135139B2 (en) | 2012-06-27 | 2015-09-15 | Intel Corporation | Methods and systems to identify and reproduce concurrency violations in multi-threaded programs using expressions |
US9117021B2 (en) | 2013-03-14 | 2015-08-25 | Intel Corporation | Methods and apparatus to manage concurrent predicate expressions |
WO2015027403A1 (en) * | 2013-08-28 | 2015-03-05 | Hewlett-Packard Development Company, L.P. | Testing multi-threaded applications |
US10564989B2 (en) | 2017-11-28 | 2020-02-18 | Microsoft Technology Licensing | Thread independent parametric positioning for rendering elements |
US10424041B2 (en) * | 2017-12-11 | 2019-09-24 | Microsoft Technology Licensing, Llc | Thread independent scalable vector graphics operations |
WO2021217397A1 (zh) * | 2020-04-28 | 2021-11-04 | 深圳开源互联网安全技术有限公司 | Node.js组件漏洞检测方法及*** |
US20230122466A1 (en) * | 2021-10-20 | 2023-04-20 | International Business Machines Corporation | Cache coherence validation using delayed fulfillment of l2 requests |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101390094A (zh) * | 2006-02-22 | 2009-03-18 | 微软公司 | 针对复制数据库的分布式冲突解决 |
US7673181B1 (en) * | 2006-06-07 | 2010-03-02 | Replay Solutions, Inc. | Detecting race conditions in computer programs |
Family Cites Families (40)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6009269A (en) * | 1997-03-10 | 1999-12-28 | Digital Equipment Corporation | Detecting concurrency errors in multi-threaded programs |
US6446258B1 (en) | 1998-11-03 | 2002-09-03 | Intle Corporation | Interactive instruction scheduling and block ordering |
US6378124B1 (en) * | 1999-02-22 | 2002-04-23 | International Business Machines Corporation | Debugger thread synchronization control points |
US7152226B2 (en) * | 2001-09-04 | 2006-12-19 | James Pangburn | Flexible horizontal stack display and editor |
US8024735B2 (en) | 2002-06-14 | 2011-09-20 | Intel Corporation | Method and apparatus for ensuring fairness and forward progress when executing multiple threads of execution |
US7100157B2 (en) | 2002-09-24 | 2006-08-29 | Intel Corporation | Methods and apparatus to avoid dynamic micro-architectural penalties in an in-order processor |
US7386864B2 (en) * | 2003-11-12 | 2008-06-10 | Microsoft Corporation | Automatic serialization for event driven multi-threaded programs in an object structured system |
US7316005B2 (en) | 2004-01-26 | 2008-01-01 | Microsoft Corporation | Data race detection using sequential program analysis |
US7712081B2 (en) | 2005-01-19 | 2010-05-04 | International Business Machines Corporation | Using code motion and write and read delays to increase the probability of bug detection in concurrent systems |
US8010969B2 (en) | 2005-06-13 | 2011-08-30 | Intel Corporation | Mechanism for monitoring instruction set based thread execution on a plurality of instruction sequencers |
US8572606B1 (en) * | 2005-12-29 | 2013-10-29 | Vmware, Inc. | System and method for avoiding synchronization bugs through virtualization |
GB0613289D0 (en) * | 2006-07-04 | 2006-08-16 | Imagination Tech Ltd | Synchronisation of execution threads on a multi-threaded processor |
US7865778B2 (en) | 2007-02-20 | 2011-01-04 | International Business Machines Corporation | Method and system for detecting synchronization errors in programs |
US7853950B2 (en) | 2007-04-05 | 2010-12-14 | International Business Machines Corporarion | Executing multiple threads in a processor |
US8117618B2 (en) * | 2007-10-12 | 2012-02-14 | Freescale Semiconductor, Inc. | Forward progress mechanism for a multithreaded processor |
US8356287B2 (en) | 2007-10-24 | 2013-01-15 | International Business Machines Corporation | Device, system and method of debugging computer programs |
US8527976B2 (en) | 2007-11-14 | 2013-09-03 | Nec Laboratories America, Inc. | System and method for generating error traces for concurrency bugs |
US9063778B2 (en) | 2008-01-09 | 2015-06-23 | Microsoft Technology Licensing, Llc | Fair stateless model checking |
WO2009114645A1 (en) | 2008-03-11 | 2009-09-17 | University Of Washington | Efficient deterministic multiprocessing |
US7539979B1 (en) | 2008-03-31 | 2009-05-26 | International Business Machines Corporation | Method and system for forcing context-switch during mid-access to non-atomic variables |
US20100070955A1 (en) | 2008-07-08 | 2010-03-18 | Nec Laboratories America | Alias analysis for concurrent software programs |
US8479166B2 (en) | 2008-08-25 | 2013-07-02 | International Business Machines Corporation | Detecting locking discipline violations on shared resources |
US8418146B2 (en) | 2008-11-26 | 2013-04-09 | Microsoft Corporation | Sampling techniques for dynamic data-race detection |
US20100281469A1 (en) | 2009-04-30 | 2010-11-04 | Nec Laboratories America, Inc. | Symbolic predictive analysis for concurrent programs |
US8510722B2 (en) * | 2009-07-22 | 2013-08-13 | Microsoft Corporation | Detecting data race and atomicity violation via typestate-guided static analysis |
US8447960B2 (en) | 2010-01-08 | 2013-05-21 | International Business Machines Corporation | Pausing and activating thread state upon pin assertion by external logic monitoring polling loop exit time condition |
US8930907B2 (en) | 2009-12-01 | 2015-01-06 | Microsoft Corporation | Concurrency software testing with probabilistic bounds on finding bugs |
US8296519B2 (en) * | 2009-12-31 | 2012-10-23 | International Business Machines Corporation | Synchronizing access to data in shared memory via upper level cache queuing |
US8589895B2 (en) | 2010-01-13 | 2013-11-19 | International Business Machines Corporation | Architectural support for automated assertion checking |
US20110258421A1 (en) | 2010-04-19 | 2011-10-20 | International Business Machines Corporation | Architecture Support for Debugging Multithreaded Code |
US9454460B2 (en) | 2010-07-23 | 2016-09-27 | The Trustees Of Columbia University In The City Of New York | Methods, systems, and media for providing determinism in multithreaded programs |
US8832659B2 (en) | 2010-12-06 | 2014-09-09 | University Of Washington Through Its Center For Commercialization | Systems and methods for finding concurrency errors |
US8707272B2 (en) | 2011-01-04 | 2014-04-22 | Nec Laboratories America, Inc. | Scenario driven concurrency bugs: model and check |
US8595701B2 (en) | 2011-02-04 | 2013-11-26 | Fujitsu Limited | Symbolic execution and test generation for GPU programs |
US8813038B2 (en) * | 2011-02-09 | 2014-08-19 | Microsoft Corporation | Data race detection |
US8893102B2 (en) | 2011-07-27 | 2014-11-18 | Oracle International Corporation | Method and system for performing backward-driven path-sensitive dataflow analysis |
US20130097136A1 (en) * | 2011-10-17 | 2013-04-18 | Pie Digital, Inc. | Method and system for acessing domain specific in-memory database management system |
CN104220989B (zh) | 2011-12-21 | 2017-12-12 | 英特尔公司 | 用于识别并且再现多线程程序中并发冲突的方法及*** |
US9135139B2 (en) | 2012-06-27 | 2015-09-15 | Intel Corporation | Methods and systems to identify and reproduce concurrency violations in multi-threaded programs using expressions |
US9117021B2 (en) | 2013-03-14 | 2015-08-25 | Intel Corporation | Methods and apparatus to manage concurrent predicate expressions |
-
2013
- 2013-03-14 US US13/827,121 patent/US9117021B2/en not_active Expired - Fee Related
-
2014
- 2014-01-14 WO PCT/US2014/011424 patent/WO2014143391A1/en active Application Filing
- 2014-01-14 CN CN201480008999.2A patent/CN105074656B/zh active Active
- 2014-01-14 EP EP14763196.4A patent/EP2972796A4/en not_active Withdrawn
-
2015
- 2015-08-24 US US14/833,315 patent/US9830196B2/en not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101390094A (zh) * | 2006-02-22 | 2009-03-18 | 微软公司 | 针对复制数据库的分布式冲突解决 |
US7673181B1 (en) * | 2006-06-07 | 2010-03-02 | Replay Solutions, Inc. | Detecting race conditions in computer programs |
Non-Patent Citations (1)
Title |
---|
Concurrent Predicates: Finding and Fixing the Root Cause of Concurrency Violations;Justin E. Gottschlich等;《USENIX HotPar 2012》;20120807;第1-7页 * |
Also Published As
Publication number | Publication date |
---|---|
EP2972796A4 (en) | 2016-10-26 |
CN105074656A (zh) | 2015-11-18 |
EP2972796A1 (en) | 2016-01-20 |
US9830196B2 (en) | 2017-11-28 |
US20140282423A1 (en) | 2014-09-18 |
WO2014143391A1 (en) | 2014-09-18 |
US20150363242A1 (en) | 2015-12-17 |
US9117021B2 (en) | 2015-08-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105074656B (zh) | 管理并发谓词表达式的方法和装置 | |
US9792161B2 (en) | Maximizing concurrency bug detection in multithreaded software programs | |
US8813038B2 (en) | Data race detection | |
CN105511969B (zh) | 一种跨进程的线程间进行互斥的方法 | |
US20120204154A1 (en) | Symbolic Execution and Test Generation for GPU Programs | |
CN104750459B (zh) | 带有事务功能以及报告事务操作的日志记录电路的处理器 | |
US10387296B2 (en) | Methods and systems to identify and reproduce concurrency violations in multi-threaded programs using expressions | |
US7870443B2 (en) | Method to isolate crash of an embedded multi-threaded application to a shared library call without core dump files or debugger | |
US11409630B2 (en) | Systems and methods of formal verification | |
JP2009123216A (ja) | 並行バグ用のエラートレースを生成するシステムおよび方法 | |
US8347274B2 (en) | Debugging support device, debugging support method, and program thereof | |
US9355002B2 (en) | Capturing trace information using annotated trace output | |
US20140310694A1 (en) | Using application state data and additional code to resolve deadlocks | |
CN109891393A (zh) | 使用检查器处理器的主处理器错误检测 | |
CN101802798A (zh) | 在多核处理器中使用干预消息来避免活锁 | |
US20110314264A1 (en) | Key allocation when tracing data processing systems | |
US20140033181A1 (en) | Reverse debugging | |
US9038048B2 (en) | Methods, systems, and media for protecting applications from races | |
US20090328045A1 (en) | Technique for finding relaxed memory model vulnerabilities | |
US5692153A (en) | Method and system for verifying execution order within a multiprocessor data processing system | |
US20120059997A1 (en) | Apparatus and method for detecting data race | |
US20120089785A1 (en) | Apparatus and method for detecting false sharing | |
JP4637175B2 (ja) | 二次的に実行されるプロセスにおけるデッドロックを検出する方法 | |
Zhang et al. | Round-Up: Runtime checking quasi linearizability of concurrent data structures | |
US8695000B1 (en) | Data transfer protection in a multi-tasking modeling environment having a protection mechanism selected by user via user interface |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |