当前位置: 首页 > 专利查询>英特尔公司专利>正文

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

技术编号:12929148 阅读:38 留言:0更新日期:2016-02-29 00:13
本文公开了用于识别并且再现多线程程序中的并发冲突的方法及系统。本文公开的示例方法包括确定条件是否被满足,并且相对于多线程程序的第二线程的操作来对多线程程序的第一线程的操作进行串行化。对第一及第二线程的操作进行的串行化导致了并发冲突或故障,由此造成多线程程序崩溃。以这种方式,识别出对所述并发冲突承担责任的多线程程序的第一及第二线程的操作,并且能够将其修正,以消除所述故障。

【技术实现步骤摘要】
【国外来华专利技术】【专利摘要】本文公开了用于识别并且再现多线程程序中的并发冲突的方法及系统。本文公开的示例方法包括确定条件是否被满足,并且相对于多线程程序的第二线程的操作来对多线程程序的第一线程的操作进行串行化。对第一及第二线程的操作进行的串行化导致了并发冲突或故障,由此造成多线程程序崩溃。以这种方式,识别出对所述并发冲突承担责任的多线程程序的第一及第二线程的操作,并且能够将其修正,以消除所述故障。【专利说明】用于识别并且再现多线程程序中并发冲突的方法及系统
本公开概括而言涉及多线程程序,并且更具体地涉及对多线程程序中发生的并发 冲突进行调试。
技术介绍
近年来,并发/并行编程变得非常流行,在所述并发/并行编程中同时执行不同的 计算机程序并且访问共享存储器。在单个计算机程序的上下文内进行操作的并发地执行程 序通常被称为多线程程序的线程。由于线程执行的同时性,并且因为程序的不同线程访问 共享存储器,所以多线程编程具有固有的挑战。作为线程同时执行的结果,由线程执行的操 作未必以任何特定的顺序发生。然而,存在以下的实例,其中多线程程序的适当的操作要 求:在一个或多个线程中执行的一个或多个操作相对于一个或多个其他线程的操作以特定 的顺序来进行执行。例如,当访问共享存储器位置时,访问同一存储器位置的两个或更多个 线程可以依赖于所述共享存储器位置中所呈现的具体的值或多个值。然而,当由任何给定 的线程访问所述存储器位置时,所述共享存储器位置中具体的值或多个值可能取决于一个 或多个线程访问所述共享存储器位置的顺序。进一步地,给定各种线程的同时操作,确保由 多线程程序中任何给定的线程访问共享存储器位置的顺序是非常难以控制的。 程序员常常使用复合语句和互斥锁,来相对于另一个线程中执行的操作而对一个 线程中执行的操作进行适当的排序。对操作进行排序的这个过程被称作串行化。然而,锁 和复合语句必须被放置于任何给定的线程或处于使得执行期望的顺序的操作的位置中的 多个线程中。当这些锁和/或复合语句放置不当时,就不能实现期望的顺序的操作,并且可 能导致并发冲突,由此造成计算机崩溃、不正确的程序输出或其他不期望的结果。 修复包括由并发冲突造成的那些在内的任何计算机错误或故障,通常涉及再现该 故障,使得能够正确地对该故障进行识别,并且使得能够修改程序中承担责任的部分以改 正该故障。在串行程序的上下文中进行调试是非常简单的,因为它涉及顺序地单步调试代 码的指令,直至发生该故障,并且然后修正对该故障承担责任的指令。然而,调试的这种方 法在多线程程序中并不适用,因为多线程程序的各种线程的指令被执行的顺序是未知的, 而且实际上可以在程序的任何给定的执行期间改变。实际上,多线程程序中呈现的特定的 故障可能不会发生于所述程序的每次执行中(即,所述故障可能是非确定性的)。 【专利附图】【附图说明】 图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执行的一个或多个操本文档来自技高网...
用于识别并且再现多线程程序中并发冲突的方法及系统

【技术保护点】
一种方法,包括:确定条件是否被满足;以及,当所述条件被满足时,相对于多线程程序的第二线程的操作来对所述多线程程序的第一线程的操作进行串行化。

【技术特征摘要】
【国外来华专利技术】

【专利技术属性】
技术研发人员:J·戈特施利希G·波卡姆C·佩雷拉J·何
申请(专利权)人:英特尔公司
类型:发明
国别省市:美国;US

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1