CN104220989A - 用于识别并且再现多线程程序中并发冲突的方法及系统 - Google Patents

用于识别并且再现多线程程序中并发冲突的方法及系统 Download PDF

Info

Publication number
CN104220989A
CN104220989A CN201180075811.2A CN201180075811A CN104220989A CN 104220989 A CN104220989 A CN 104220989A CN 201180075811 A CN201180075811 A CN 201180075811A CN 104220989 A CN104220989 A CN 104220989A
Authority
CN
China
Prior art keywords
thread
condition
satisfied
controller
frame
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
CN201180075811.2A
Other languages
English (en)
Other versions
CN104220989B (zh
Inventor
J·戈特施利希
G·波卡姆
C·佩雷拉
J·何
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.)
Intel Corp
Original Assignee
Intel Corp
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 Intel Corp filed Critical Intel Corp
Publication of CN104220989A publication Critical patent/CN104220989A/zh
Application granted granted Critical
Publication of CN104220989B publication Critical patent/CN104220989B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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/3632Software debugging of specific synchronisation aspects
    • 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/3648Software debugging using additional hardware
    • 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
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • 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/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues

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)
  • Multimedia (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本文公开了用于识别并且再现多线程程序中的并发冲突的方法及系统。本文公开的示例方法包括确定条件是否被满足,并且相对于多线程程序的第二线程的操作来对多线程程序的第一线程的操作进行串行化。对第一及第二线程的操作进行的串行化导致了并发冲突或故障,由此造成多线程程序崩溃。以这种方式,识别出对所述并发冲突承担责任的多线程程序的第一及第二线程的操作,并且能够将其修正,以消除所述故障。

Description

用于识别并且再现多线程程序中并发冲突的方法及系统
技术领域
本公开概括而言涉及多线程程序,并且更具体地涉及对多线程程序中发生的并发冲突进行调试。
背景技术
近年来,并发/并行编程变得非常流行,在所述并发/并行编程中同时执行不同的计算机程序并且访问共享存储器。在单个计算机程序的上下文内进行操作的并发地执行程序通常被称为多线程程序的线程。由于线程执行的同时性,并且因为程序的不同线程访问共享存储器,所以多线程编程具有固有的挑战。作为线程同时执行的结果,由线程执行的操作未必以任何特定的顺序发生。然而,存在以下的实例,其中多线程程序的适当的操作要求:在一个或多个线程中执行的一个或多个操作相对于一个或多个其他线程的操作以特定的顺序来进行执行。例如,当访问共享存储器位置时,访问同一存储器位置的两个或更多个线程可以依赖于所述共享存储器位置中所呈现的具体的值或多个值。然而,当由任何给定的线程访问所述存储器位置时,所述共享存储器位置中具体的值或多个值可能取决于一个或多个线程访问所述共享存储器位置的顺序。进一步地,给定各种线程的同时操作,确保由多线程程序中任何给定的线程访问共享存储器位置的顺序是非常难以控制的。
程序员常常使用复合语句和互斥锁,来相对于另一个线程中执行的操作而对一个线程中执行的操作进行适当的排序。对操作进行排序的这个过程被称作串行化。然而,锁和复合语句必须被放置于任何给定的线程或处于使得执行期望的顺序的操作的位置中的多个线程中。当这些锁和/或复合语句放置不当时,就不能实现期望的顺序的操作,并且可能导致并发冲突,由此造成计算机崩溃、不正确的程序输出或其他不期望的结果。
修复包括由并发冲突造成的那些在内的任何计算机错误或故障,通常涉及再现该故障,使得能够正确地对该故障进行识别,并且使得能够修改程序中承担责任的部分以改正该故障。在串行程序的上下文中进行调试是非常简单的,因为它涉及顺序地单步调试代码的指令,直至发生该故障,并且然后修正对该故障承担责任的指令。然而,调试的这种方法在多线程程序中并不适用,因为多线程程序的各种线程的指令被执行的顺序是未知的,而且实际上可以在程序的任何给定的执行期间改变。实际上,多线程程序中呈现的特定的故障可能不会发生于所述程序的每次执行中(即,所述故障可能是非确定性的)。
附图说明
图1是被实现为多线程控制器的示例工具的框图,用于再现多线程程序中的并发冲突。
图2示出了伪代码表示的示例多线程程序的第一及第二线程的操作。
图2A示出了伪代码表示的示例多线程程序的第一及第二线程的操作,所述示例多线程程序具有分别插入到所述第一及第二线程中的第一线程控制器和第二线程控制器。
图3是图1的多线程控制器的示例实施方式的框图。
图4示出了伪代码表示的示例控制结构的示例操作,所述示例控制结构被用于控制图1和/或图3的示例第一线程控制器及第二线程控制器的操作。
图5示出了伪代码表示的图3的示例多线程控制器的示例状态监视器的示例操作。
图6示出了伪代码表示的图3的示例第一及第二线程控制器的示例操作,所述示例第一及第二线程控制器被配置为控制图2的第一及第二线程的操作。
图7是表示示例机器可读指令的流程图,所述示例机器可读指令可以被执行以实现图1的多线程控制器,以用于使第一线程及第二线程再现由除零异常所造成的并发冲突。
图8是表示示例机器可读指令的流程图,可以执行所述示例机器可读指令以实现图3的多线程控制器,以用于使图2的第一线程及第二线程再现由除零异常造成的并发冲突。
图9是表示示例机器可读指令的流程图,可以执行所述示例性机器可读指令以实现图6的多线程控制器,以用于使图2的所述第一线程及第二线程再现由除零异常造成的并发冲突。
图10是表示示例机器可读指令的流程图,可以执行所述示例性机器可读指令以实现图4的示例控制结构。
图11示出了可以被用于实现图4的控制结构的操作的伪代码。
图12是示例处理系统的框图,其可以执行图7、图8、图9、图10和/或图11的示例机器可读指令来实现图1、图3、图4、图5和/或图6的示例多线程控制器。
具体实施方式
本文公开了用于识别、再现和/或修复多线程程序中的并发冲突的方法及系统。在示例方法中,当一个或多个条件被满足时,相对于由多线程程序的第二线程所执行的一个或多个操作,对由多线程程序的第一线程所执行的一个或多个操作进行串行化。在至少一些示例中,对第一及第二线程的操作进行的串行化造成了并发冲突发生。
与仅能够识别出多线程程序的执行导致了一个或多个并发冲突的现有调试工具不同,本文公开的调试工具能够再现并发冲突,使得识别出对该冲突承担责任的操作并且能够对其进行修正。另外,本文公开的调试工具能够在程序被修正以后使用以确定所述修正是否有效地消除了该故障。同样,本文公开的调试工具不会产生使用现有调试工具经常导致的误报。
图1示出了用于再现多线程程序11中并发冲突的示例调试工具10的框图。图1的示例工具10为多线程控制器10,其包括第一线程控制器12A和第二线程控制器12B,它们分别控制多线程程序11的第一线程,线程1、第二线程,线程2的向前进行。示出的示例的第一及第二线程控制器12A、12B被放置于线程1及线程2中的特定位置16、18、20、22,这些特定位置在对造成并发冲突承担责任的线程1和线程2的部分中或在其附近。例如,在图1的示例中,当到达特定位置16时,第一线程控制器12A变为活动的,并且进行操作以控制线程1的向前进行,直至到达特定位置18的执行或直至发生并发冲突。同样地,当到达特定位置20的执行时,第二线程控制器12B变为活动的,并且进行操作以控制线程2的向前进行直至到达特定位置22的执行,或直至发生并发冲突。因此,示出的示例的每一个线程控制器12A、12B变为其相应的线程中的部分。如下面更详细地进行描述的,由第一及第二线程控制器12A、12B执行的一个或多个操作可以分别代替由线程1和/或线程2执行的一个或多个操作。
图1的第一示例线程控制器12A被实现为控制逻辑处理器24A,其取决于条件测试器26A的输出而执行一个或多个期望的操作。示出的示例的条件测试器26A确定在由定时器28A指出的预定义的或阈值时间量内一个或多个条件是否已满足。所述条件被存储在存储器30A中,并且包括预定义的变量的集合。当期望数量的条件被满足时,示出的示例中的第一及第二线程控制器12A、12B协作相对于由线程1或线程2执行的一个或多个操作来对由线程1或线程2执行的一个或多个操作进行串行化。
图1示出了第一及第二控制器12A、12B的示例实施方式。在图1的示例中,用同一附图标记来对包括在第一及第二控制器12A、12B中的具有相似功能的元件进行标记,后缀A用于代表与第一线程控制器12A相关联的元件,并且后缀B用于代表与线程控制器12B相关联的元件。由于第一及第二线程控制器12A、12B的元件的功能相似,并且为简短起见,只针对图1描述第一示例线程控制器12A的功能。感兴趣的读者参考第一示例线程控制器12A中相似的附图标记的元件的描述,以用于对第二示例线程控制器12B进行理解。
在调试环境中,程序员可能无法确切地知道线程1及线程2的哪部分对造成并发冲突承担责任,(例如,程序员可能不知道故障的位置在哪里)。因此,在图1的示例中,假设程序员做出了关于以下内容的根据经验的猜测:对于并发冲突的发生而言,特定点16、18、20、22的位置在哪里以及必须满足什么条件。假如程序员根据经验的推测是正确的,就再现了并发冲突,(例如,故障发生,并且程序员能够识别出线程1及线程2中承担责任的有缺陷的操作)。当线程1、线程2适当地利用第一及第二控制器12A、12B进行执行时,如果没有发生并发冲突,则程序员能够识别出线程1及线程2的相对应的部分不对所述故障负责。程序员接着可以做出关于以下内容的有经验的猜测:线程1及线程2的哪些其他部分可能造成所述并发冲突。程序员然后重新配置并且将所述第一及第二示例线程控制器12A、12B移至所述线程中的不同位置,试图再现所述并发冲突。有时将定位线程1及线程2的部分中对所述并发冲突负责的这个过程被称作分治技术。
一旦隔离了对所述故障负责的线程1及线程2中有缺陷的操作,程序员就可以修正所述操作,试图消除该故障。程序员接着可以适当地利用第一及第二线程控制器12A、12B来重新执行线程1及线程2。如果再次发生该故障,那么程序员可以进一步修正所述有缺陷的线程操作。如果该故障没有再次发生,并且假定已经对示例线程控制器进行了适当地配置,则程序员有信心已经消除和/或修复了所述故障。
使用图2的伪代码来描述由图1的线程1及线程2执行的操作的示例集合。在这个示例中,线程1及线程2的执行可以造成由除零异常引起的并发冲突。当线程2使用等于0的除数y来执行除法指令时,发生该异常。除数y作为变量被存储在共享存储器位置中。线程1还对变量y进行操作,并且使变量y等于0。如果线程1检测到存储在共享存储器中的变量y为0,那么线程1利用非0值来替换0。在这个示例中,只有当共享存储器中存储的变量y等于0,并且在线程1将共享存储器重置为非0值之前线程2执行除法操作时,才会发生除零异常。因此,为了再现该并发冲突,以当存储在共享存储器中的除数y为0时使得线程2执行除法操作的方式来对线程1及线程2的操作进行串行化。
仍然参考图2,通过获取锁来防止线程2访问存储y的共享存储器,线程1开始,如伪代码的T11-T13行所反映的。一旦获取了锁,线程1则计算y的值。在这个示例中,执行以获取y的具体计算并不是相关的。重要的只是所述计算可以造成y的值等于0。在对y进行计算后,释放所述锁,使得线程1或线程2可以访问存储y的共享存储器。如图2的T14-T16行所反映的,线程1然后第二次获取所述锁,并且进行检查以确定y的值是否等于0。如果等于0,则线程1将y的值重置为等于1,以避免如果线程2使用除数0来执行除法操作,则可能发生的除零异常。线程1然后释放所述锁。
通过获取锁来防止线程1访问存储y的共享存储器,线程2开始,如图2的T21-T23行所反映的。线程2然后使用y作为除数来执行除法操作,其后线程2释放该锁。在多线程程序11的多次迭代期间,当线程1对等于0的y的值进行计算时,在线程2执行除法操作之前,线程1会将y的值重置为1。然而,可能存在如下的实例:在所述实例中,线程1对等于0的y的值进行计算并且然后线程1及线程2二者同时请求该锁。如果线程2先于线程1获取了该锁,并且因此在线程1将y重置为非0值之前,那么可能发生除零异常。
现在参考图1及图2,在一些示例中,第一及第二示例线程控制器12A、12B分别控制线程1及线程2,其中两个线程正如结合图2所述的进行操作。在图2A的示例中,在由图2的T11-T13行所反映的操作之后并且在由T14-T16行所反映的操作之前,第一线程控制器12A位于线程1中。在这个示例中,当条件y等于0被满足时,将引起相对于线程2对线程1进行串行化的条件发生。
在图2A的示例中,第二线程控制器12B被放置于线程2的开始处。作为结果,在开始执行线程2处,示例条件测试器26B针对条件y等于0进行测试,并且测试定时器28B的输出以确定是否已过去预定义的时间量。如果条件y等于0没有被满足,并且定时器28B的输出指出没有经过预定义的时间量,则示出的示例的控制逻辑处理器24B停止第二线程控制器12B,由此使线程2的向前进行至少暂时停止或被延迟。当线程2停止时,示出的示例的条件测试器26B重置y的值和定时器28B的输出,直至条件y等于0被满足或直至已过去预定义的时间量。
在第一实例后,其中线程1中释放了锁(参见图2A的T13行),第一示例线程控制器12A开始操作。示例条件测试器26A确定条件y等于0是否被满足。如果y不等于0,则控制逻辑处理器24A使第一线程控制器12A释放对线程1的控制。
如果y等于0,则控制逻辑处理器24A停止或延迟线程1的向前进行,直至已过去由定时器28A测量的预定义的时间量,或直至发生计算机程序崩溃。另外,示出的示例的控制逻辑处理器24B解除对第二示例线程控制器12B的操作的停止以准许T21-T23行(参见图2A)反映的操作执行,所述操作包括:1)获取锁T21,2)执行除法操作T22,以及3)释放锁T23。在示出的示例中,当示例控制逻辑处理器24B执行除法操作T22时,由于第一线程控制器12A和第二线程控制器12B的协同操作,保证了除数y的值等于0。作为结果,正如所预期的,发生了由除零异常所造成的并发冲突,这导致多线程程序11崩溃。以这种方式,第一及第二线程控制器12A、12B对线程1及线程2的操作进行串行化,以确保当y等于0时控制逻辑处理器24B执行除法操作。所导致的崩溃通知程序员线程1及线程2的相关部分可能对所述故障有责任,并且应该被修正。
如上所述,如果条件y等于0不被满足,则示出的示例的控制逻辑处理器24A使第一线程控制器12A释放对线程1的控制,由此允许执行由图2的T14-T16行所反映的操作。另外,示出的示例的控制逻辑处理器24B执行由线程2的图2A中T21-T23行所反映的操作。因为在这个实例中y不等于0,除数y为非零值,所以执行除法操作不会造成计算机崩溃。由于崩溃未能发生,所以线程1及线程2的相关部分不对所述并发冲突负责,或者所述相关部分已经进行了适当的修复,这取决于线程控制器12A和12B是如何被使用的。
在上述示例中,第一及第二线程控制器12A、12B的操作至少部分地取决于条件y等于0被满足和/或已过去预定义的时间量。取决于受控的线程,所述第一及第二线程示例控制器12A、12B的操作无需取决于满足同一条件和/或由定时器28A及28B所测量的预定义的时间量无需相等。而且,如上所述,示例线程控制器12A、12B可以被配置为替换由受控线程执行的任何、全部操作或不替换其操作。
另外,虽然图1和图2示出了具有两个线程的示例多线程程序11,但是所述多线程程序11可以包括任何数量的线程,并且可以由任何数量的线程控制器来进行控制。进一步地,任何数量的线程控制器可以在任何指定的时间进行操作或“活动”。取决于受控线程和/或被再现的并发冲突的类型,线程控制器12A、12B的操作、配置及部件可以变化。
在一些示例中,在第一线程控制器12A的操作开始之前,第二线程控制器12B的操作开始。然而,可以应用操作的其他顺序。例如,在对线程1及线程2进行串行化之前通过要求条件y等于0被满足,第一及第二线程控制器12A、12B实际开始进行操作的顺序并不重要。
图3示出了图1的多线程控制器10的示例实施方式,其中示例线程控制器12A、12B执行由图4的示例伪代码示出的各种操作。图4的示例伪代码定义了被用于控制线程控制器12A及12B的操作的控制结构。在这个示例中,多线程控制器10包括状态监视器302,其具有条件测试器304以确定是否同时满足了期望数量的条件。每个条件(例如,谓词)表示在线程的串行化将导致并发冲突之前必须被满足的线程条件。当同时满足了期望数量的谓词(本文也称作并发谓词)时,将状态监视器302的输出设置为真。一旦状态监视器302的输出为真,并且取决于一个或多个其他条件,控制逻辑处理器24A、24B协作相对于线程2的操作来对线程1的操作进行串行化。
在这个示例中,控制逻辑处理器24A被实现为包括调用程序处理器310A、预操作处理器320A、条件操作处理器330A和后操作处理器340A。
示出的示例的调用程序处理器310A使第一线程控制器12A开始进行操作,并且定义了被称为state、priorityA、controlA、sleepA、sleepIfFalseA和predicateA的参数集,正如图4的cp1行所反映的。所述参数被存储在存储器30A中,并且如下所述,由条件测试器26A评估所述参数以用于控制条件操作处理器330A的操作。
示出的示例的预操作处理器320A在调用程序处理器310A之后进行操作,并且执行任何数量的串行化操作,正如图4的cp2行所反映的。在一些示例中,所述串行化操作包括对变量集进行初始化以确保第一线程控制器12A的适当操作。取决于受控线程(或多个线程)和被再现的并发冲突的类型(或多种),由示出的示例的预操作处理器320A执行的串行化的操作将不同。例如,预操作处理器能够定义共享存储器计数器以使用由图4的伪代码所表示的控制结构来检测不计划要检测的某些并发冲突。一些这样的并发冲突包括死锁和活锁,当定义的事件集合中的至少一些以例如某个不期望的顺序发生时,所述死锁和活锁就会发生。
示出的示例的条件操作处理器330A执行串行化操作的第一集合或第二集合332A、334A,如图4的cp3和cp4行所反映的,这取决于由调用程序处理器310A所定义的参数、定时器28A的输出和状态监视器302的输出的存在或不存在。操作的第一集合(其可以包括任何数量的操作,包括零个和一个)被称作满足操作332A,并且操作的第二集合(其可以包括任何数量的操作,包括零个和一个)被称作不满足操作334A。当并发冲突所需的条件被满足时,执行满足操作332A。在一些示例中,在由定时器28A所测量的预定义的(例如,阈值)时间量内所述条件被必须满足。满足操作332A可以包括任何数量的操作。取决于受控线程以及被再现的并发冲突的类型,具体的操作将不同。
当满足操作332A的执行所需的条件不被满足时,示出的示例的条件操作处理器330A执行不满足操作334A。在一些示例中,不满足操作334A不会被执行,直至已过去由定时器28A所测量的预定义的(例如,阈值)时间量。因此,在示出的示例中,当造成并发冲突所需的条件不被满足时,执行不满足操作334A。不满足操作334A可以包括任何数量的操作。取决于受控线程以及被再现的并发冲突的类型,具体的操作将不同。
在释放对线程1的控制之前,在执行满足操作332A或不满足操作334A之后,示出的示例的后操作处理器340A执行可能需要的任何数量的清除操作,正如图4的cp5行所反映的。取决于受控线程及再现的并发冲突的类型,由示出的示例的后操作处理器340A执行的清除操作将不同。
如上所述,由示出的示例中的调用程序处理器310A定义的参数被用于确定条件操作处理器330A将执行满足操作332A或不满足操作334A。在一些示例中,predicateA参数为布尔值,并且表示在条件操作处理器330A执行满足操作332A前必须被满足(例如,必须返回真)的条件中的一个。另外,状态监视器302的输出及示出的示例的controlA参数必须返回“真”。
在图3和图4的示例中,由状态监视器302A使用state参数来生成在下文中被称作“verify(state)”的输出。如上所述,状态监视器302的输出是要被满足的预定义的条件之一,以便用于要执行的满足操作332A。状态监视器302确定期望数量的活动线程控制器是否同时具有被满足的predicate参数。当所述期望数量的活动线程控制器具有被满足的predicate参数时,verify(state)返回真。如前所述,一个以上的线程控制器在任何给定的时间都可以是活动的。在一些示例中,变量N表示用于评估在状态监视器302的输出verify(state)返回真之前是否存在期望数量的并发谓词的值。在示出的示例中,将条件运算符to_satisfy应用于N,以测试是否存在期望数量的并发谓词。另外,在示出的示例中,称作“满足谓词”的变量集包含threadID的列表,每个threadID标识了具有满足谓词的活动的、唯一线程。在示出的示例中,变量S表示在任何给定的时间满足谓词的变量集中所包含的threadID的数量,使得S等于具有被同时满足的谓词的活动线程的数量(例如,S表示在任何给定的时间满足并发谓词的实际数量)。在图3的示例中,变量N、to_satisfy、satisfied predicates和S全部存储在状态监视器302包括的存储器306中。
图5示出了以伪代码表示的操作的示例集合,所述操作由图3的示例状态监视器302执行以生成输出verify(state)。当状态监视器302访问存储器306以获取值N和to_satisfy(二者都是基于程序员提供的信息而在之前定义的)时,图5的示例操作开始。示出的示例的状态监视器302将变量S设置为等于“满足谓词”集中包含的threadID数量,正如由图5的SM1行所表示的。在获取变量N和to_satisfy后,状态监视器302基于N的值和条件运算符to_satisfy来确定满足并发谓词的实际数量S何时到达并发谓词的阈值数量,正如由图5的SM3-SM7行所表示的。如果谓词的阈值数量等于0,并且满足谓词的实际数量等于0,则状态监视器的输出返回真,如图5的SM3行所反映的。如果谓词的阈值数量小于N,并且满足谓词的实际数量S小于N,则状态监视器的输出返回真,如图5的SM4行所反映的。如果谓词的阈值数量大于N,并且满足谓词的实际数量S大于N,则状态监视器302的输出返回真,如图5的SM5行所反映的。如果谓词的阈值数量等于N,并且满足谓词的实际数量S等于N,则状态监视器302的输出返回真,如图5的SM6行所反映的。如果谓词的阈值数量等于称作“active_predicates”的变量,并且满足谓词的实际数量S等于变量“in_predicates”的值,则状态监视器302的输出返回真,如图5的SM7行所反映的。在一些示例中,变量active_predicates是由程序员设置的值。变量in_predicates为threadID的集合,其识别出主动受控于线程控制器的线程。当由状态监视器22A执行的评估中的至少一个为真时,verify(state)返回真。如果没有一个评估为真,则verify(state)返回假。
再次参考图3和图4的示例,示出的示例的priorityA参数是表示第一线程控制器12A的优先级的32位无符号值,其中,0为最高优先级,4,294,967,295为最低优先级。任何给定的线程控制器的priority参数确定了该线程控制器相对于其他线程控制器将执行其满足操作的顺序。例如,保证具有最高priority参数的线程控制器在具有较低priority参数的任何其他线程控制器之前执行其满足操作。各种线程控制器的priority参数无需是唯一的,使得在绑定piroity参数的事件中,顺序是不重要的,并且不保证具体的顺序。下面提供的附加的细节是关于:示例priorityA参数是如何被用于至少部分地控制是否允许第一线程控制器12A相对于任何其他线程控制器来执行满足操作332A。
示出的示例的controlA参数为布尔值,并且表示以下条件的其中一个,所述操作与verify(state)、predicateA参数和priorityA参数相结合,来控制条件操作处理器330A是否会执行满足操作332A。在一个示例中,如果controlA参数为假,那么条件操作处理器330A将不执行满足操作332A,无论verify(state)和predicateA参数是否为真。相反,条件操作处理器330A将执行不满足操作334A。在所述示例中,如果controlA参数为真,并且取决于其他条件,如下所述,第一线程控制器12A可以1)执行不满足操作334A,2)允许用于条件被满足的附加的时间,所述条件是满足操作332A的执行所需的条件,或者3)执行满足操作332A。
示出的示例的sleepA参数是以毫秒为单位的预定义的(例如,阈值)时间量,其用于第一线程控制器12A允许在执行不满足操作334A之前来满足满足操作332A的执行所需的条件。在一个示例中,假如1)verify(state)参数或2)controlA参数中的任何一个为假,或者3)priorityA参数不是被主动受控的线程中的最高优先级,假如1)predicateA参数为真,或者2)predicateA参数为假并且sleepIfFalseA参数(下面描述)为真,则第一线程控制器12A会继续等待满足操作所需的条件被满足。在这个示例中,如果满足了前述条件,则由条件测试器26A将定时器28A的输出与sleepA参数进行对照。如果sleepA参数超过了定时器28A的输出,则满足操作332A的执行所需的条件还没有被满足,并且预定义的(例如,阈值)时间量还没有终止。在这种情况下,第一线程控制器12A将允许用于条件被满足的附加的时间,所述条件是满足操作332A的执行所需的条件。
在这个示例中,如果sleepA参数没有超出定时器28A的输出,则满足操作332A的执行所需的条件还没有被满足,并且预定义的(例如,阈值)时间量已经终止。在这种情况下,或因为程序员对关于故障的位置在哪里的有经验的推测是不正确的,因为已经修复了故障,或因为被分配的用于允许满足操作332A发生的时间量是不足的,所以没有检测出故障。
在这个示例中,如果1)predicateA参数,2)verify(state)参数或3)controlA参数中的任何一个为假,或4)priorityA不是主动受控的线程的最高优先级。而且此外如果sleepIfFalseA参数(下面描述的)和predicateA参数二者均为假,则将执行不满足操作334A,因为程序员通过将sleepIfFalseA参数设置为假来决定将不允许用于执行满足操作的附加的时间。
在这个示例中,如果1)predicateA参数,2)verify(state)参数,3)controlA参数全为真,并且4)priorityA为主动受控的线程中的最高优先级,则存在故障,并且条件操作处理器330A执行满足操作332A导致了计算机程序崩溃。
示出的示例的sleepIfFalseA参数为布尔值,并且如上所述,至少部分地控制第一线程控制器12A是否允许用于条件操作处理器330A执行满足操作332A的附加的时间。特别地,如上所述,如果predicateA参数为真,或如果predicateA参数为假并且sleepIfFalseA参数为真,则假如预定义的(例如,阈值)时间量还没有终止,第一线程控制器12A将允许用于条件操作处理器330A执行满足操作332A的附加的时间。如果predicateA参数为假并且sleepIfFalseA参数为假,则第一线程控制器12A将不允许用于条件操作处理器330A执行满足操作332A的附加的时间,即使预定义的(例如,阈值)时间量可能没有终止。
在图3的示例中,用同一附图标记来对具有相似功能的第一及第二控制器12A、12B中所包括的元件进行标记,后缀A用于指与第一线程控制器12A相关联的元件,并且后缀B用于指与第二线程控制器12B相关联的元件。由于第一及第二线程控制器12A、12B的元件功能相似,并且为了简明起见,针对图3只描述了第一线程控制器12A的功能。相似编号的结构功能是相似的,并且本文将不会再谈。对于相同结构的完整描述,感兴趣的读者可参考相似编号的结构的上述描述。
图6以伪代码示出了图3的第一及第二线程控制器12A和12B的示例实施方式。图6的示例中的第一及第二线程控制器12A、12B分别控制图2的线程1及线程2。
在这个示例中,分别将状态监视器302的变量N和to_satisfy设置为“2”和“等于”,使得当S等于2(例如,并发谓词的数量为2)时,状态监视器302的输出verify(state),将返回真。
当第二线程控制器12B开始操作时,示出的示例的调用程序处理器310B将state、priorityB、controlB、sleepB、sleepIfFalseB和predicateB参数设置为TC21行中反映的值。在这个示例中,state参数为s,其包括关于要被同时满足的谓词的数量N的状态信息以及相关联的条件运算符to_satisfy。在这个示例中,要被同时满足的谓词数量被表示为s.N,并且相关联的条件运算符被表示为s.to_satisfy。将priorityB参数设置为0或假,controlB参数设置为1或真,sleepB参数设置为1000,sleepIfFalseB参数设置为1或真,并且predicateB参数设置为“y等于0”。
示出的示例的调用程序处理器310B操作后,预操作处理器320B进行操作。在这个示例中,由TC22行指示没有任何预操作,并且因此不执行操作。第二线程控制器12B然后休眠(例如,停止)长达1000毫秒,直至条件操作处理器330B所需的条件被满足或睡眠定时器28B终止。为了便于示出的示例的操作处理器330B执行满足操作332B,在1000毫秒过去之前,prediacteB参数(例如,y等于0)、verify(state)和controlB参数必须全为真。如上所述,示出的示例的调用程序处理器310B将controlB参数预定义为真,因此第二线程控制器12B被停止,直至predicateB参数(y等于0)为真,并且verify(state)为真。
同时,线程1获取关于变量y的锁,计算y的值,并且释放关于变量y的锁。示出的示例的第一线程控制器12A接着开始操作,并且调用程序处理器310A对state、priorityA、controlA、sleepA、sleepIfFalseA和predicateA参数进行设置。在这个示例中,state参数为s,其包括关于要被同时满足的谓词数量N,以及相关联的条件运算符to_satisfy的状态信息。在这个示例中,要被同时满足的谓词数量被表示为s.N,而相关联的条件运算符被表示为s.to_satisfy。将priorityA参数设置为假,controlA参数设置为假,sleepA参数设置为1000毫秒,sleepIfFalseA参数设置为假,并且将predicateA参数设置为“y等于0”。
示出的示例的调用程序处理器310A操作后,预操作处理器320A进行操作。在这个示例中,没有指定预操作,正如图6的TC1行所示出的,使得由预操作处理器320A不执行操作。示出的示例的第一线程控制器12A接着确定条件操作处理器330A执行满足操作332A所需的条件是否被满足。同样,predicateA参数(即,y等于0)、verify(state)和controlA参数必须全为真。在这个示例中,将controlA参数设置为假,使得将不再执行满足操作332A。另外,如上面结合图4所描述的,因为将sleepIfFalseA参数设置为假,然后假设predicateA参数也为假,则第一线程控制器12A将执行不满足操作334A,后操作处理器340A将进行操作,并且将释放对线程1的控制。在这个示例中,不满足操作334A和后操作为无操作(即,不操作),如由TC11行中缺乏这些指令所指出的,使得没有操作被执行,并且第一线程控制器12A释放对线程1的控制并且释放对线程1的控制。
如果predicateA参数被确定为真,则predicateA和predicateB参数二者均为真。作为结果,满足了并发谓词的阈值数量,S=2,并且verify(state)返回真。尽管事实上predicateA参数和verify(state)二者均返回真,但是因为controlA参数被设置为假,所以示出的示例的条件操作处理器330A将不执行满足操作332A。然而,因为predicateA参数为真,所以示出的示例的第一线程控制器12A将休眠长达1000毫秒,或直至发生崩溃。在这个示例中,y等于0为并发冲突所需的条件,所以当predicateA参数为真时,计算机将崩溃,如下所述。
如上所述,当y等于0时,predicateB参数为真,并且示出的示例的条件操作处理器330B执行满足操作332B,因为controlB参数和verify(state)也为真。在这个示例中,由条件操作处理器330B所执行的满足操作332B包括1)锁操作,2)除法操作,和3)解锁操作,如图6的TC23-TC27行所指出的。因为除法操作中使用的除数等于0,(例如,“y等于0”),所以以除零异常的形式发生了并发冲突,并且多线程程序11崩溃。因此,再现了所述故障,并且对造成所述故障发生的多线程程序11的部分进行了隔离。
如果在1000毫秒之前不满足predicateB参数,则示出的示例的条件操作处理器330B将执行不满足操作334B,其后并且后操作处理器340B将进行操作。在这个示例中,除了此次迭代期间y为非零值之外,不满足操作334B与满足操作332B相同,如图6的TC29行所反映的,使得除法操作不会造成多线程程序11崩溃。所述后操作为空序列(例如,无操作),如TC29和TC210行之间指令的缺少所反映的,使得后操作处理器340B不执行任何操作,并且第二线程控制器12B释放对线程2的控制。
如果多线程程序11没有崩溃,并且执行了由TC23-TC8行所表示的操作(例如,没有发生并发冲突所需的条件),那么向程序员确保了并发冲突不是与线程1及线程2的这些部分相关联的除零异常的结果。程序员接着可以配置线程控制器的新集合来控制可能造成并发冲突的线程1及线程2的其他部分(未示出)。或者,如果响应于程序崩溃而对线程进行修正后,程序员使用第一及第二线程控制器12A、12B,那么程序员有信心成功修复了缺陷代码。
当描述图6的第一线程控制器12A及第二线程控制器12B的操作时,没有考虑priorityA和priorityB参数的值,因为所述值是相同的。作为结果,在这个示例中,第一及第二线程控制器12A、12B的优先级都不超过对方,使得第一及第二线程控制器12A、12B可以相对于彼此而以任何顺序执行。
再次参考图4,由图3的预操作处理器320A、320B及条件操作处理器330A、330B执行的操作为串行化的复合操作,并且因此执行时没有任何交叉操作。作为结果,当给定的线程控制器的预操作处理器进行操作时,其他线程控制器的预操作处理器及条件操作处理器不允许进行操作。类似地,当给定的线程控制器的条件操作处理器操作时,其他线程控制器的预操作处理器及条件操作处理器不允许进行操作。以这种方式,由各种线程控制器的处理器中的一些所执行的具体类型的操作相对于彼此来进行串行化,以防止发生可能对多线程控制器10的操作产生不利影响的任何不期望的交叉操作。
尽管图1、图3、图4、图5和图6中示出了多线程控制器10和第一线程控制器及第二线程控制器12A、12B的示例,但是可以以任何其他方式合并、拆分、重新布置、省略、删除和/或实现图1、图3、图4、图5和图6示出的一个或多个元件、过程和/或设备。进一步地,可以通过硬件、软件、固件和/或硬件、软件和/或固件的任何组合来实现图1、图3、图4、图5和图6的示例线程控制器12A、12B、10,示例控制逻辑控制器24A、24B,示例条件测试器26A、26B、304,示例存储器30A、30B、306、示例调用程序处理器310A、310B,示例预操作处理器320A、320B,示例条件操作处理器330A、330B,示例后操作处理器340A、340B,示例定时器28A、28B以及示例状态监视器302中的任何或全部。因此,可以通过一个或多个电路、可编程处理器、专用集成电路(ASIC)、可编程逻辑设备(PLD)和/或现场可编程逻辑设备(FPLD)等来实现例如任何示例线程控制器12A、12B、10,示例控制逻辑控制器24A、24B,示例条件测试器26A、26B、304,示例存储器30A、30B、306,示例调用程序处理器310A、310B,示例预操作处理器320A、320B,示例条件操作处理器330A、330B、示例后操作处理器340A、340B,示例定时器28A、28B以及示例状态监视器302。当阅读本专利的任何装置权利要求以涵盖纯软件和/或固件实施方式时,示例线程控制器12A、12B、10,示例控制逻辑控制器24A、24B,示例条件测试器26A、26B、304,示例存储器30A、30B、306,示例调用程序处理器310A、310B,示例预操作处理器320A、320B,示例条件操作处理器330A、330B,示例后操作处理器340A、340B,示例定时器28A、28B以及示例状态监视器302中的至少一个由此被明确地限定为包括存储这样的软件和/或固件的有形计算机可读介质,例如存储器、数字光盘(DVD)、光盘(CD)等。进一步地,图1、图3、图4、图5和图6的示例线程控制器10可以包括一个或多个元件、过程和/或设备,除了图1、图3、图4、图5和图6示出的元件、过程和/或设备之外,或代替图1、图3、图4、图5和图6示出的元件、过程和/或设备,和/或可以包括任何或全部示出的元件、过程和设备中的多个。
图7、图8、图9和图10中示出了表示可以被执行以实现图1、图3、图4、图5和图6中的第一和/或第二线程控制器的示例机器可读指令的流程图。在这些示例中,由每一个流程图表示的机器可读指令可以包括用于由处理器执行的一个或多个程序,例如下面结合图15讨论的示例处理系统1500中示出的处理器1512。可选择地,实现了由图7、图8、图9和图10的流程图表示的一个或多个过程的整个程序或多个程序和/或其部分能够由除处理器1512之外的设备(例如,控制器和/或任何其他合适的设备)来执行,和/或在固件或专用硬件中进行具体化(例如,由ASIC、PLD、FPLD、离散逻辑等来实现)。同样,可以手工实现图7、图8、图9、图10中流程图的一个或多个框。进一步地,虽然参考图7、图8、图9、图10中示出的流程图来描述示例机器可读指令,但是可以可选择地使用用于实现本文所述的示例方法及装置的许多其他技术。例如,参考图7、图8、图9、图10示出的流程图,可以改变框的执行顺序,和/或可以将所描述的框中的一些进行改变、删除、组合和/或被再划分到多个框中。
如上所述,可以使用存储在有形的计算机可读介质(例如,硬盘驱动、闪存存储器、只读存储器(ROM)、CD、DVD、高速缓存、随机存取存储器(RAM)和/或任何其他存储介质)上的编码指令(例如,计算机可读指令)来实现图7、图8、图9、图10的示例过程,在所述有形的计算机可读介质中针对任何持续时间(例如,针对延长的时间段、永久、简要实例、针对临时缓冲区和/或针对信息的高速缓存)来存储信息。如本文所使用的,术语有形的计算机可读介质被明确地限定为包括任何类型的计算机可读存储装置,并且排除传播信号。另外或可选择地,可以使用存储在非暂时性计算机可读介质(例如,闪存、ROM、CD、DVD、高速缓存、随机存取存储器(RAM)和/或任何其他存储介质)上的编码指令(例如,计算机可读指令)来实现图7、图8、图9和图10的示例过程,在所述非暂时性计算机可读介质中针对任何时间段(例如,针对延长时间段、永久、简要实例、针对临时缓冲区和/或针对信息的高速缓存)来存储信息。如本文所使用的,术语非暂时性计算机可读介质被明确地限定为包括任何类型的计算机可读介质,并且排除传播信号。同样,正如本文所使用的,术语“计算机可读”和“机器可读”被认为是等价的,除非另有说明。如本文所使用的,当短语“至少”被用作权利要求的序言中的过渡术语时,它是开放式的,与术语“包括”是开放式的方式相同。因此,在其序言中使用“至少”作为过渡术语的权利要求可以包括除该权利要求中明确列举的那些之外的元件。
由图7示出的流程图来表示示例机器可读指令700,其可以被执行以实现图1的第一和/或第二线程控制器12A和12B。基于事件(例如,预定事件)等或其任何组合的发生,可以有间隔地(例如,预定的间隔)执行示例机器可读指令700。在图7的框702处机器可读指令700开始执行,此处第一线程,线程1开始操作直至到达线程1中特定的点,在该点处第一线程控制器12A在框704开始操作。同时,第二线程,线程2在框706开始操作,直至在框708处到达线程2中的特定点,在该点处第二线程控制器12B开始操作。
在框704一旦第一线程控制器12A开始操作,则流程进行至框710,在框710处条件测试器26A确定条件集中的一个或多个是否已被满足。如果满足了所述条件,则控制进行至框712,在框712处第一及第二线程控制器相对于彼此来对线程1及线程2的一个或多个操作进行串行化。控制接着进行至框714,在框714处多线程程序11崩溃。如果在框710不满足所述条件,则在框717第一线程控制器12A释放对线程1的控制。
在框708一旦第二线程控制器12B开始操作,则流程进行至框718,在框718条件测试器26B确定条件集中的一个或多个是否已被满足。如果满足了条件中的一个或多个,那么控制进行至框712,在框712第一及第二线程控制器12A、12B相对于彼此对线程1及线程2中的一个或多个操作进行串行化。控制接着进行至框714,在框714多线程11程序崩溃。如果在框718条件中的一个或多个没有被满足,并且在框716定时器28B还没有终止,则在框718条件测试器26B继续针对要被满足的条件进行测试。在框716如果条件中的一个或多个没有被满足,而定时器已经终止,则在框717第二线程控制器12B释放对线程2的控制。正如关于图7所能看到的,当满足所述条件时,第一及第二线程控制器12A、12B协作相对于线程2来对线程1的操作进行串行化,由此迫使并发冲突发生并且迫使计算机崩溃。
由图8示出的流程图表示示例机器可读指令800,其可以被执行以实现图1的第一和/或第二线程控制器12A和12B,以控制根据图2的伪代码进行操作的多线程程序11。基于事件(例如,预定的事件)等或其任何组合的发生,可以有间隔地(例如,预定的间隔时间)执行示例机器可读指令800。在图8的框802机器可读指令800开始执行,在图8的框802第一线程、线程1开始操作。在框802,线程1执行图2的T11-T13的操作,所述操作包括1)获取锁,2)计算y的值,以及3)释放该锁。接下来,在框804,第一线程控制器12A开始操作,并且条件测试器26A针对条件y等于0进行测试。如果不满足所述条件,则在框806第一线程控制器12A释放对线程1的控制。在框808执行由图2的T14-T16行所表示的操作,1)获取所述锁,2)如果y等于0,则将y设置为1,以及3)释放该锁。在框812第二线程控制器12B开始执行,并且条件测试器26B针对条件y等于0进行测试。如果不满足该条件,则第二线程控制器12B的向前进行停止,并且因此线程2停止直至在框814定时器28B终止或条件y等于0被满足。在框814如果条件y等于0不被满足并且定时器28B终止,那么在框816控制逻辑处理器24B执行线程2的T21-T23行,以1)获取关于变量y的锁,2)使用y作为除数来执行除法操作,以及3)释放关于y的锁。在这个迭代中,y为非零值,使得除法操作不会造成多线程程序11崩溃。在释放所述锁后,在框818第二线程控制器释放对线程2的控制。
在框804,如果条件测试器26A确定条件y等于0被满足,则在框812条件测试器26B还确定条件y等于0被满足。作为结果,对第二线程控制器12B的操作解除停止,并且在框820控制逻辑处理器24B执行T21-T23行,以1)获取关于变量y的锁,2)使用y作为除数来执行除法操作;以及3)释放关于y的锁。因为除数y为0,所以在释放锁之前,在框822多线程程序11经历了并发冲突,并且计算机程序崩溃。
由图9示出的流程图表示示例机器可读指令900,其可以被执行以实现图3、图4和图5的第一及第二线程控制器12A、12B,以控制根据图2的伪代码进行操作的多线程程序11。在这个示例中,第一及第二线程控制器12A、12B根据图6定义的控制结构操作进行操作以分别控制线程1和线程2。基于事件(例如,预定的事件)等或其任何组合的发生,可以有间隔地(例如,预定的间隔)执行示例机器可读指令900。在这个示例中,变量N和to_satisfy被设置为“2”和“等于”,并且变量集“满足”被定义为不包括threadID。因此,在这个示例中,仅当具有并发谓词的活动线程的数量S等于2时,状态监视器302的输出才会返回真。
在框902机器可读指令900开始执行,在框902第二线程控制器12B开始操作。具体地,在框902,调用第二线程控制器的控制结构,并且调用程序处理器310B对state、priorityB、controlB、sleepB、sleepIfFalseB和predicateB参数进行设置。在这个示例中,state参数具有设置为“2”的state.N和设置为“等于”的state.to_satisfy,priorityB参数被设置为0,controlB参数被设置为真,sleepB被设置为1000,sleepIfFalseB参数被设置为真,并且predicateB参数被设置为条件y等于0。
调用第二线程控制器12B后,在框904如果由控制结构指定了任何预处理操作,则预操作处理器320B执行预处理操作的集合。在这个示例中,控制结构中没有指定预处理操作,使得不执行操作。在框906条件测试器26B接着进行测试,以确定执行满足操作332B所需的条件是否被满足。在这种情况下,在执行满足操作332B之前,predicateB参数y=0必须为真,状态监视器302的输出必须为真,并且controlB参数必须为真。在框902,调用程序处理器310B将controlB参数预定义为真,所以如果predicateB参数y等于0和状态监视器302的输出二者均变为真,则将执行满足操作332B。如果不满足相关条件,正如结合图4所述的,则假如predicateB参数为假并且sleepifFalseB参数为真,第二线程控制器12B将允许用于满足条件的附加的时间。在这个示例中,predicateB参数为假并且sleepifFalseB参数为真,使得分配了附加的时间(在这个示例中为1000毫秒)。在框908,条件测试器26B确定由定时器28B所测量的1000毫秒是否已过去。在框908如果定时器28B没有终止,则控制返回到框906。以这种方式,在框906和框908线程2的向前进行停止长达1000毫秒,直至在框906条件测试器26B确定条件操作处理器330B执行满足操作332B所需的条件已经被满足,或直至在框908定时器28B已经终止。
在框910,线程1执行,以1)获取关于变量y的锁,2)计算y的值,以及3)释放关于变量y的锁。在框912当调用程序处理器310A对state、priorityA、controlA、sleepA、sleepIfFalseA和predicateA参数进行设置时,第一线程控制器12A接着开始操作。此处,state参数具有设置为“2”的state.N和设置为“等于”的state.to_satisfy,priorityA参数被设置为0,controlA参数被设置为假,sleepA参数被设置为1000,sleepIfFalseA参数被设置为假,并且predicateA参数被设置为y等于0。
在调用第一线程控制器12A后,如果控制结构进行指定了预处理操作,则在框914预操作处理器320A执行预处理操作的集合或序列。在这个示例中,没有指定预处理操作,使得不执行操作。在框916,条件测试器26A确定条件操作处理器330A执行满足操作332A所需的条件是否已被满足。特别地,条件测试器确定predicateA参数、verify(state)和controlA参数是否都为真。因为在框912调用程序处理器310A将controlA参数设置为假,所以满足操作332A将永远不被执行,如框918所指出的。在框920,条件测试器确定predicateA参数是否已经被满足。如果predicateA参数为假(即,y不等于0),则在框926释放对线程1的控制之前,在框922第一线程控制器12A将执行不满足操作334A,并且在框924后操作处理器340A将执行。如上面结合图4所描述的,如果在框920条件测试器26A确定predicateA参数为假,则第一线程控制器12A将允许用于条件被满足的附加的时间,所述条件是满足操作的执行所需的条件,除非sleepIfFalseA参数为假。在这个示例中,在图6的控制结构中将sleepIfFalseA参数设置为假,使得不允许附加的时间,并且条件操作处理器330A执行不满足操作334A。图6的第二线程控制器12A的控制结构没有指定任何不满足操作332A或后操作,使得这个示例中在框922和924不执行动作。在框926,执行由图6的T14-T16行所指出的线程1操作。在框920,如果条件测试器26A确定predicateA参数y等于0为真,并且第一线程控制器12A允许用于满足条件被满足的附加的时间,本示例中为1000ms,那么线程1将停止,直至定时器终止或predicateA参数变为假。因为将controlA参数设置为假,所以将绝不会满足所述满足条件,使得第一线程控制器12A停止1000毫秒或直至计算机程序崩溃。
再次参考第二线程控制器12B的操作,当predicateA参数为真时,predicateB参数y=0也为真,并且verify(state)返回真。此时,在框906进行测试的所有参数都被满足,并且在框932条件操作处理器330B执行满足操作332B。在框932由条件操作处理器330B执行的满足操作332B包括1)获取锁(TC25),2)使用y作为除数来执行除法操作(TC26);以及3)释放锁(TC27)。因为除法操作中使用的除数等于0,即y=0,所以以除零异常的形式发生并发冲突,并且在框934多线程计算机程序11崩溃。因此,再现了所述故障,并且对造成所述故障发生的多线程程序11的部分进行了隔离。
如果1000毫秒过去之前predicateB参数y=0不变为真,如在框908所确定的,则在框936条件操作处理器330B将执行不满足操作334B,并且在框938后操作处理器330B将进行操作。在这个示例中,不满足操作334B与满足操作332B相同,除了此次执行期间y不等于0,并且所述除法操作不会造成计算机程序11崩溃。后操作为空序列(例如,无操作),使得在框938后操作处理器340B不执行任何操作,并且在框9404第二线程控制器12B释放对线程2的控制。
当描述图9的第一线程控制器12A和第二线程控制器12B的操作时,不考虑priorityA和priorityB参数的值,因为所述值是相同的。作为结果,在这个示例中,第一及第二线程控制器12A、12B的优先级都不超过对方,使得第一及第二线程控制器12A、12B可以相对于彼此来以任何顺序执行。
可以使用可替换的技术,例如,lambda表达式、匿名函数或C-预处理器宏,而不使用上面所示出的编程语言关键字来实现图4中的pre、if_satisfed、else和post复合语句。
由图10示出的流程图表示示例机器可读指令1000,可以执行所述示例机器可读指令1000以实现图4所反映的第一或第二线程控制器12A、12B二者之一的操作。虽然所述示例机器可读指令可以被用于实现第一或第二线程控制器12A、12B二者之一,但是出于说明目的,参考第一线程控制器12A来描述图10的流程图的框。可以基于事件(例如,预定的事件)等或其任何组合的发生,有间隔地(例如,预定的间隔)执行示例机器可读指令1000。在线程控制器12A开始操作之前,对状态监视器302的变量N、to_satisfy和satisfied进行设置,以获取关于verify(state)将返回真所需的谓词的数量。
在框1002,调用程序处理器310A对控制结构的参数state、priorityA、controlA、sleepA、sleepIfFalseA和predicateA进行设置。在框1004,执行若干操作以对确保第一线程控制器12A的适当的操作所需的各种变量进行设置。在某些示例中,所述操作包括:1)锁定共享变量state以防止由其他线程控制器进行访问,2)将变量exeIfSatisfied设置为假以指出还没有执行满足操作332A,3)执行预操作,4)将当前线程的threadID插入到称为s.in_predicate的变量集中,以指出当前线程是活动的,5)如果controlA参数被设置为真,则将当前线程的threadID和priorityA参数插入到被称为s.priorities的变量集中,以及6)释放关于共享变量state的锁。被称为s.priorities的集中所存储的threadID稍后将被用于确定当前活动的线程是否具有主动受控的所有线程中最高的优先级。在框1004执行的第二、第三、第四及第五操作都被用于影响由线程控制器所执行的操作流,如下所述。
在框1006,条件测试器26A通过评估sleepA参数是否大于0来确定定时器28A是否终止。在框1008如果sleepA参数大于0,则执行操作的集合,其包括1)将变量predsatisfied设置为假来指出当前线程的predicateA参数还没有被满足;2)将变量beginTime设置为等于Clock()的值;3)锁定共享变量state以防止由其他线程控制器进行访问;4)假如predicateA参数为真,则将当前线程的threadID插入到变量集s.satisfed中,并且将变量predSatisfied设置为真,以及5)如果predicateA参数不为真,则从变量s.satisfied中移除当前线程的threadID。当将当前线程的threadID插入到s.satisfied中,如在框1008执行的第四操作所反映的,由状态监视器所使用的变量S被加一。如上面所讨论的,变量S反映了用于所有当前活动的线程的活动的并发谓词的数量。类似地,如果从s.satisfied中移除threadID,则S变量被减一以指出少一个线程具有活动的并发谓词。在框1008执行的第一、第二、第四及第五操作被用于影响由第一线程控制器12A执行的操作流,如下所述。
在框1010,条件测试器26A确定并发冲突所需的条件是否已被满足。特别地,条件测试器26A确定verify(state)、preSatisified、controlA和priorityA=s.top_priority是否全为真。在这个示例中,s.top_priority等于具有值为真的控制变量的所有当前活动线程中最高的priority参数。通过确定当前线程的priorityA参数是否等于s.top_priority,第一线程控制器12A评估线程1是否具有比所有其他活动线程更高的优先级。如果线程1的priorityA参数高于或等于与所有其他活动线程相关联的priority参数,则在框1012将执行满足操作332A,如下所述。以这种方式,协调了活动线程控制器的满足操作被执行的顺序。
在框1010假如条件测试器26A确定了并发冲突所需的条件被满足,则控制进行至框1012。在框1012,所执行的操作的集合包括:1)从s.satisfied中移除threadID;2)从s.in_predicates中移除threadID;3)从变量集s.priorities中移除当前线程的threadID和priority参数;4)执行满足操作;5)将变量exeIfSatisfied设置为真,以指出满足操作已经被执行;以及6)释放关于共享变量state的锁。在框1012执行的第一、第二及第三操作涉及在图10所包括的对下次执行的框的预期中对变量s.satisfed、s.in_predicate和s.priorities进行重置,。在框1012之后,控制进行到框1020,在框1020执行了操作的集合,如下所述。
在框1010,如果并发冲突所需的条件没有被满足,则在框1014对state的共享互斥进行解锁。在框1016,条件测试器26A确定是否1)preSatisfied为真或是否2)preSatisfied为假,并且sleepifFalseA为真。在框1016执行的测试被用于确定所述第一线程控制器12A是否会继续以允许用于满足并发冲突所需的条件的附加的时间。在框1016如果条件测试器26A确定所述条件不被满足,则第一线程控制器12A将不再等待并发冲突所需的条件,并且将执行由框1020所反映的操作,如下所述。在框1016如果条件测试器26A确定条件被满足,则在框1018第一线程控制器12A将等待用于满足并发冲突所需的条件的附加的时间量,并且将计算sleepA参数的值。在框1018,所执行的操作的集合包括:1)调用具有参数1的sleep()函数,以迫使受控的线程休眠1毫秒,由此允许其他线程向前进行,2)将变量endTime设置为等于Clock(),以及3)将sleepA参数设置为等于sleepA-(endTime-beginTime)。在框1006,条件测试器26A再次确定sleepA参数是否大于0,如上所述。框1006到框1018的执行可以被实现为由框1022所表示的while循环。
如果在框1006,条件测试器26A确定sleepA参数不大于0,则在框1020执行的操作的集合包括1)锁定共享变量state的互斥;2)假如变量exeIfSatisfied为假,则执行不满足操作;3)从变量集s.satisfied中移除当前线程的threadID;4)从变量集s.in_predicates中移除当前线程的threadID;5)从变量集s.priorities中移除当前线程的threadID及priority参数;6)释放共享变量state的锁;7)执行后操作;以及,8)退出控制结构,(即,释放对线程的控制)。正如针对框1012所描述的,在框1020操作涉及将变量s.satisfied、s.in_predicates和s.priorities进行重置,所述重置在对图10所包括的框的下次执行的预测中执行。在框1020,如果在第二次操作期间条件测试器26A确定变量exeIfSatisfied为真,则不执行不满足操作334A。
图11示出了表示实现图4的线程控制器的示例方式的伪代码。由图10的流程图反映了由图11的伪代码语句所执行的操作的通用流程。在这个示例中,框1002的操作对应于图11的第一语句。框1004的操作对应于图11的语句2至语句9。框1006的操作对应于语句10。框1008、框1010及框1012的操作对应于语句11到语句30。框1014的操作对应于语句31。框1016的操作对应于语句32到语句34。框1012的操作对应于语句35到语句38。框1020的操作对应于语句39到语句43。如上所述,图10的框是要反映由图11的伪代码语句所执行的操作的通用流程。作为结果,在图10的框与图11的伪代码语句之间并不存在一对一的对应。注意的是,图10的一些示例框的示例操作中的一些没有被限定为由图4的伪代码所表示的控制结构的部分。一些这样的示例操作包括框1020的3)、4)及5)行和框1012的1)、2)及3)行。在图10的框的稍后的迭代期间,由线程控制器执行这样的示例操作用于例如重置系统变量并且准许线程控制器的适当操作。
虽然出于说明目的,在图6、图7、图8和/或图9的示例中,第一线程控制器12A被描述为先于第二线程控制器12B而开始操作,或反之,或第一及第二线程控制器12A和12B被描述为同时开始操作,第一或第二线程控制器12A及12B二者之一能够先于对方而开始操作。
图12是能够实现本文公开的示例装置及方法的示例处理系统1500的框图。处理系统1500可以是例如服务器、个人计算机、个人数字助理(PDA)、手机、互联网设备或任何其他类型的计算设备。
系统1500的即时示例包括处理器1512,例如通用可编程处理器。处理器1512包括本地存储器1514,并且执行本地存储器1514和/或另一存储器设备中所出现的编码指令1516。在其他方面,处理器1512可以执行图7到图11中表示的机器可读指令。处理器1512可以是任何类型的处理单元,例如来自奔腾系列、安腾系列和/或系列的一个或多个微处理器,来自和/或系列的微处理器中的一个或多个微处理器等。当然,来自其他系列和/或制造商的其他处理器也是适当的。
处理器1512经由总线1522与包括易失性存储器1518及非易失性存储器1520的主存储器进行通信。易失性存储器1518可以由静态随机存取存储器(SRAM)、同步动态随机存取存储器(SDRAM)、动态随机存取存储器(DRAM)、RAMBUS动态随机存取存储器(RDRAM)和/或任何其他类型的随机存取存储器设备实现。非易失性存储器1520可以由闪存存储器和/或任何其他期望类型的存储器设备实现。对主存储器1518、1520的访问一般由存储器控制器(未示出)来进行控制。
处理系统1500还包括接口电路1524。接口电路1524可以由任何类型的接口标准来实现,接口标准例如以太网接口、通用串行总线(USB)和/或PCI快速接口。
将一个或多个输入设备1526连接到接口电路1524。输入设备1526允许用户将数据及命令键入到处理器1512中。输入设备可以由例如键盘、鼠标、触摸屏、触控板、轨迹球、isopoint和/或语音识别系统来实现。
还将一个或多个输出设备1528连接到接口电路1524。输出设备1528可以由例如显示设备(例如,液晶显示器、阴极射线管显示器(CRT))、由打印机和/或由扬声器来实现。因此,接口电路1524一般包括图形驱动卡。
接口电路1524还包括通信设备,例如,调制解调器或网络接口卡,以有助于经由网络(例如,以太网连接、数字用户线(DSL)、电话线、同轴电缆、蜂窝电话系统等)来与外部计算机进行数据交换。
处理系统1500还包括一个或多个海量存储设备1530,以用于存储机器可读指令及数据。这样的海量存储设备1530的示例包括软盘驱动、硬驱动盘、光盘驱动及数字光盘(DVD)驱动。在一些示例中,海量存储设备1530可以实现存储器28A、28B。
图7到图11的编码指令1532可以被存储在海量存储设备1530中、易失性存储器1518中、非易失性存储器1520中、本地存储器1514中和/或可移除存储介质中,例如CD或DVD 1532。
作为在系统(例如图15的处理系统)中实现本文描述的方法和/或装置的替代方式,本文描述的方法和/或装置可以被嵌入在诸如处理器和/或ASIC(专用集成电路)之类的结构中。
最后,虽然本文描述了某些示例方法、装置及制品的制造,但是本专利所涵盖的范围并不限于此。相反,本专利涵盖了从字面上或在等效原则下完全落入本专利的权利要求范围内的所有方法、装置及制品的制造。

Claims (20)

1.一种方法,包括:
确定条件是否被满足;以及,
当所述条件被满足时,相对于多线程程序的第二线程的操作来对所述多线程程序的第一线程的操作进行串行化。
2.如权利要求1所述的方法,其中,所述串行化造成并发冲突。
3.如权利要求1所述的方法,进一步包括:控制所述第一线程的向前进行,并且控制所述第二线程的向前进行。
4.如权利要求1所述的方法,其中,所述条件包括并发冲突所需的条件。
5.如权利要求1所述的方法,其中,所述条件包括与所述第一线程相关联的第一条件以及与所述第二线程相关联的第二条件。
6.如权利要求5所述的方法,其中,当所述第一条件及第二条件同时被满足时,发生所述串行化。
7.一种存储计算机可读指令的有形制品的制造,当执行所述计算机可读指令时使得计算机至少用于:
确定条件是否被满足;以及,
基于所述条件是否被满足,相对于多线程程序的第二线程的操作而对多线程程序的第一线程的操作进行串行化。
8.如权利要求7所述的有形制品的制造,其中,所述计算机可读指令进一步使得所述计算机用于:
控制所述第一线程的向前进行,并且控制所述第二线程的向前进行。
9.如权利要求8所述的有形制品的制造,其中,所述条件包括第一条件和第二条件,并且所述计算机可读指令进一步使得所述计算机用于:
停止所述第一线程的向前进行,直至所述第一条件被满足或直至已过去第一时间量;以及,
停止所述第二线程的向前进行,直至所述第二条件被满足或直至已过去第二时间量。
10.如权利要求7所述的有形制品的制造,其中,所述条件包括与所述第一线程相关联的第一条件和与第二线程相关联的第二条件。
11.如权利要求7所述的有形制品的制造,其中,相对于所述第二线程进行的对所述第一线程的操作的串行化造成了并发冲突。
12.一种用于控制多线程程序的装置,所述装置包括:
第一线程控制器,用于控制所述多线程程序的第一线程的向前进行;
第二线程控制器,用于控制所述多线程程序的第二线程的向前进行;
条件测试器,用于确定条件是否被满足,当所述条件被满足时,所述第一线程控制器及第二线程控制器对所述第一线程及第二线程的操作进行串行化。
13.如权利要求12所述的装置,其中,对所述第一线程及第二线程的操作进行的所述串行化造成了并发冲突。
14.如权利要求12所述的装置,其中,所述条件包括与所述第一线程相关联的第一条件和与所述第二线程相关联的第二条件。
15.如权利要求14所述的装置,进一步包括状态监视器,所述状态监视器基于所述第一条件及所述第二条件是否被满足来生成输出,所述条件进一步包括所述状态监视器的输出。
16.如权利要求15所述的装置,其中,所述状态监视器的输出基于所述第一条件及所述第二条件是否同时被满足。
17.如权利要求12所述的装置,进一步包括定时器,当在由所述定时器指示的阈值时间量内所述条件被满足时,所述第一线程控制器及第二线程控制器用于对所述第一线程及第二线程的操作进行串行化。
18.如权利要求17所述的装置,其中,当在所述阈值时间量内所述条件未被满足时,所述第一线程控制器用于释放对所述第一线程的控制,第二控制器用于释放对所述第二线程的控制。
19.如权利要求12所述的装置,其中,所述第一线程控制器及第二线程控制器包括:
调用程序处理器,用于识别所述条件;以及,
条件操作处理器,如果所述条件被满足则执行操作的第一集合,而如果所述条件未被满足则执行操作的第二集合。
20.如权利要求19所述的装置,其中,所述第一线程控制器及第二线程控制器进一步包括定时器,如果在由所述定时器指示的阈值时间量内所述条件被满足,则所述条件操作处理器执行所述操作的第一集合,如果在由所述定时器指示的阈值时间量内所述条件未被满足,则所述条件操作处理器执行所述操作的第二集合。
CN201180075811.2A 2011-12-21 2011-12-21 用于识别并且再现多线程程序中并发冲突的方法及系统 Expired - Fee Related CN104220989B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2011/066520 WO2013095441A1 (en) 2011-12-21 2011-12-21 Methods and systems to identify and reproduce concurrency violations in multi-threaded programs

Publications (2)

Publication Number Publication Date
CN104220989A true CN104220989A (zh) 2014-12-17
CN104220989B CN104220989B (zh) 2017-12-12

Family

ID=48669092

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201180075811.2A Expired - Fee Related CN104220989B (zh) 2011-12-21 2011-12-21 用于识别并且再现多线程程序中并发冲突的方法及系统

Country Status (4)

Country Link
US (2) US9311143B2 (zh)
EP (1) EP2795466A4 (zh)
CN (1) CN104220989B (zh)
WO (1) WO2013095441A1 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106980544A (zh) * 2017-03-31 2017-07-25 北京奇艺世纪科技有限公司 一种线程同步方法及线程同步系统
CN109040653A (zh) * 2018-06-28 2018-12-18 苏州科达科技股份有限公司 数据加解密开销确定方法、装置及电子设备

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9311143B2 (en) 2011-12-21 2016-04-12 Intel Corporation Methods and systems to identify and reproduce concurrency violations in multi-threaded programs
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
US10725889B2 (en) * 2013-08-28 2020-07-28 Micro Focus Llc Testing multi-threaded applications
US9971627B2 (en) 2014-03-26 2018-05-15 Intel Corporation Enabling maximum concurrency in a hybrid transactional memory system
US9697040B2 (en) 2014-03-26 2017-07-04 Intel Corporation Software replayer for transactional memory programs
US10396394B2 (en) * 2016-01-12 2019-08-27 Toyota Jidosha Kabushiki Kaisha Method for producing sulfide all-solid-state battery and sulfide all-solid-state battery
US10430321B1 (en) * 2018-08-21 2019-10-01 International Business Machines Corporation White box code concurrency testing for transaction processing
US20230004448A1 (en) * 2021-07-01 2023-01-05 EMC IP Holding Company LLC Balanced winner assignment for deadlock resolution
CN116166566A (zh) * 2023-04-23 2023-05-26 成都华兴汇明科技有限公司 一种测试用例多线程调度方法、系统及测试管理装置

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030233394A1 (en) * 2002-06-14 2003-12-18 Rudd Kevin W. Method and apparatus for ensuring fairness and forward progress when executing multiple threads of execution
US20050102681A1 (en) * 2003-11-12 2005-05-12 Richardson John J. Automatic serialization for event driven multi-threaded programs in an object structured system
CN101067794A (zh) * 2007-06-14 2007-11-07 中兴通讯股份有限公司 多核处理器及其串口复用方法
CN101526948A (zh) * 2009-04-23 2009-09-09 山东中创软件商用中间件股份有限公司 多线程文件遍历技术
US20090235262A1 (en) * 2008-03-11 2009-09-17 University Of Washington Efficient deterministic multiprocessing
US7673181B1 (en) * 2006-06-07 2010-03-02 Replay Solutions, Inc. Detecting race conditions in computer programs
US20110022893A1 (en) * 2009-07-22 2011-01-27 Microsoft Corporation Detecting data race and atomicity violation via typestate-guided static analysis
US20110173422A1 (en) * 2010-01-08 2011-07-14 International Business Machines Corporation Pause processor hardware thread until pin

Family Cites Families (35)

* Cited by examiner, † Cited by third party
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
US7152226B2 (en) 2001-09-04 2006-12-19 James Pangburn Flexible horizontal stack display and editor
US7100157B2 (en) 2002-09-24 2006-08-29 Intel Corporation Methods and apparatus to avoid dynamic micro-architectural penalties in an in-order processor
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
JP4476193B2 (ja) * 2005-07-29 2010-06-09 株式会社ソニー・コンピュータエンタテインメント 情報処理方法および情報処理装置
US8572606B1 (en) * 2005-12-29 2013-10-29 Vmware, Inc. System and method for avoiding synchronization bugs through virtualization
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
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
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
US9069894B2 (en) * 2010-06-18 2015-06-30 Microsoft Technology Licensing, Llc Data collisions in concurrent programs
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
US20130097135A1 (en) * 2011-10-17 2013-04-18 Pie Digital, Inc. Method and system for generating domain specific in-memory database management system
US9311143B2 (en) 2011-12-21 2016-04-12 Intel Corporation Methods and systems to identify and reproduce concurrency violations in multi-threaded programs
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

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030233394A1 (en) * 2002-06-14 2003-12-18 Rudd Kevin W. Method and apparatus for ensuring fairness and forward progress when executing multiple threads of execution
US20050102681A1 (en) * 2003-11-12 2005-05-12 Richardson John J. Automatic serialization for event driven multi-threaded programs in an object structured system
US7673181B1 (en) * 2006-06-07 2010-03-02 Replay Solutions, Inc. Detecting race conditions in computer programs
CN101067794A (zh) * 2007-06-14 2007-11-07 中兴通讯股份有限公司 多核处理器及其串口复用方法
US20090235262A1 (en) * 2008-03-11 2009-09-17 University Of Washington Efficient deterministic multiprocessing
CN101526948A (zh) * 2009-04-23 2009-09-09 山东中创软件商用中间件股份有限公司 多线程文件遍历技术
US20110022893A1 (en) * 2009-07-22 2011-01-27 Microsoft Corporation Detecting data race and atomicity violation via typestate-guided static analysis
US20110173422A1 (en) * 2010-01-08 2011-07-14 International Business Machines Corporation Pause processor hardware thread until pin

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106980544A (zh) * 2017-03-31 2017-07-25 北京奇艺世纪科技有限公司 一种线程同步方法及线程同步系统
CN106980544B (zh) * 2017-03-31 2020-03-03 北京奇艺世纪科技有限公司 一种线程同步方法及线程同步系统
CN109040653A (zh) * 2018-06-28 2018-12-18 苏州科达科技股份有限公司 数据加解密开销确定方法、装置及电子设备
CN109040653B (zh) * 2018-06-28 2020-09-29 苏州科达科技股份有限公司 数据加解密开销确定方法、装置及电子设备

Also Published As

Publication number Publication date
US9311143B2 (en) 2016-04-12
WO2013095441A1 (en) 2013-06-27
US20140115604A1 (en) 2014-04-24
US20160224457A1 (en) 2016-08-04
CN104220989B (zh) 2017-12-12
US10191834B2 (en) 2019-01-29
EP2795466A4 (en) 2015-09-23
EP2795466A1 (en) 2014-10-29

Similar Documents

Publication Publication Date Title
CN104220989A (zh) 用于识别并且再现多线程程序中并发冲突的方法及系统
Arcaini et al. Modeling and analyzing MAPE-K feedback loops for self-adaptation
EP2546749A1 (en) Method and system for test suite control
Krena et al. Healing data races on-the-fly
Misailovic et al. Dancing with uncertainty
US20080244592A1 (en) Multitask processing device and method
Dehnert et al. Fast debugging of PRISM models
US8972784B2 (en) Method and device for testing a system comprising at least a plurality of software units that can be executed simultaneously
US20030144891A1 (en) Supervising the processing status of activities within workflow management systems
Lachmann et al. Towards efficient and effective testing in automotive software development
EP2341438A1 (en) Coverage apparatus and method for testing multi-thread environment
Beyer et al. A light-weight approach for verifying multi-threaded programs with CPAchecker
Li et al. Precise and efficient atomicity violation detection for interrupt-driven programs via staged path pruning
JP2019091144A (ja) シミュレーション装置、シミュレーションシステム、シミュレーション方法及びシミュレーションプログラム
US20090265534A1 (en) Fairness, Performance, and Livelock Assessment Using a Loop Manager With Comparative Parallel Looping
Da Alves et al. Fault localization in multi-threaded C programs using bounded model checking
Beccuti et al. Markov decision Petri net and Markov decision well-formed net formalisms
Püschel et al. Towards systematic model-based testing of self-adaptive software
Johnsen et al. Experience report: evaluating fault detection effectiveness and resource efficiency of the architecture quality assurance framework and tool
Mayer et al. Diagnosis of service failures by trace analysis with partial knowledge
Durmaz et al. Intelligent software debugging: A reinforcement learning approach for detecting the shortest crashing scenarios
CN113742252A (zh) 一种检测内存乱序的方法及装置
Molnár et al. Model checking-based software-FMEA: Assessment of fault tolerance and error detection mechanisms
Wörzberger et al. On correctness, compliance and consistency of process models
US20240202098A1 (en) Static analysis for sound interleaving pruning in enumerative model checking

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
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20171212

Termination date: 20211221

CF01 Termination of patent right due to non-payment of annual fee