【技术实现步骤摘要】
本专利技术一般涉及计算机系统,尤其涉及在多线程计算机程序中检测竞争条件。
技术介绍
计算机软件开发者通常编写使用多线程执行的程序。现代的操作系统和编程语言支持线程,且许多大型商业应用程序是多线程的。对于在一操作系统进程中实现多个异步的计算,线程尤其有用。例如,事件驱动应用程序通常采用多线程。然而,正是使得多线程成为有用的编程技术的特征也使得调试多线程程序成为非常困难的任务。多线程可以用非确定和时间相关的方式交互。通常这样的线程共享数据,需要它们的交互同步以确保程序的正确性,而与如何调度线程或如何交叉其指令流无关。对编程者而言,在与竞争条件相关联的线程同步中检测错误尤其困难。在多线程程序中,当两个或更多并发线程访问共享存储单元却没有适当的同步限制访问顺序时(其中至少一个访问是写入),就产生数据竞争条件。在这种情况下,执行的效果取决于访问发生的特定顺序。竞争条件常会导致意想不到的和不可预期的程序动作,诸如程序崩溃或错误的结果。这种不确定性也正是使用常规的调试技术难以检测竞争条件的精确原因。给定竞争条件的潜在有害影响和调试包含它们的程序的难度,用于检测竞争条件存在的 ...
【技术保护点】
一种在程序中用于动态检测潜在竞争条件的系统,所述程序具有多个线程和一个或多个共享存储单元,其特征在于,所述系统包括:对于每个共享存储单元,(i)用于维持访问所述单元的并行线程分段集的机制,以及(ii)用于维持与所述单元相关联的第一锁 集的机制;对于每个线程,(i)用于维持排列在所述线程当前线程分段之前的线程分段集的机制;以及(ii)用于维持由所述线程获取和释放的第二锁集的机制;以及用于在检测到潜在竞争条件时,报告警告的机制。
【技术特征摘要】
US 2004-3-24 10/808,1101.一种在程序中用于动态检测潜在竞争条件的系统,所述程序具有多个线程和一个或多个共享存储单元,其特征在于,所述系统包括对于每个共享存储单元,(i)用于维持访问所述单元的并行线程分段集的机制,以及(ii)用于维持与所述单元相关联的第一锁集的机制;对于每个线程,(i)用于维持排列在所述线程当前线程分段之前的线程分段集的机制;以及(ii)用于维持由所述线程获取和释放的第二锁集的机制;以及用于在检测到潜在竞争条件时,报告警告的机制。2.如权利要求1所述的系统,其特征在于,用于维持所述并行线程分段集的机制包括用于维持排序对集的机制,其中排序对集中对的一成员是线程标识符,而所述对的另一成员是与由所述线程标识符标识的线程相关联的虚拟时钟值。3.如权利要求1所述的系统,其特征在于,用于维持排列在所述当前线程分段之前的线程分段集的机制包括用于维持排序对集的机制,其中排序对集中对的一成员是线程标识符,而对的另一成员是与由所述线程标识符所标识的线程相关联的虚拟时钟值。4.一种用于在程序中动态检测潜在竞争条件的计算机实现方法,所述程序具有多个线程和一个或多个共享存储单元,其特征在于,所述方法包含对于每个共享存储单元,维持与所述单元相关联的第一锁集,以及维持访问所述单元的并行线程分段集;对于每个线程,维持所述线程获取和释放的第二锁集;以及维持排在线程的当前线程分段之前的线程分段集。5.如权利要求4所述的方法,其特征在于,还包括对于每个线程,维持与所述线程相关联的虚拟时钟。6.如权利要求5所述的方法,其特征在于,维持所述虚拟时钟包括当创建所述线程时,将所述虚拟时钟初始化为一初始值。7.如权利要求6所述的方法,其特征在于,维持所述虚拟时钟包含当创建所述线程时,将所述虚拟时钟初始化为零。8.如权利要求5所述的方法,其特征在于,维持排列在所述线程的当前线程分段之前的线程分段集包括维持排序对集,其中对的一成员是线程标识符,而对的另一成员是虚拟时钟值。9.如权利要求8所述的方法,其特征在于,还包括如果第一线程衍生出第二线程将排在所述第二线程当前线程分段之前的线程分段集计算为以下集合的并集(a)排在第一线程当前线程分段之前的线程分段集;(b)包含所述第一线程当前线程分段的单元素集;递增与第一线程相关联的所述虚拟时钟;以及初始化与第二线程相关联的所述虚拟时钟。10.如权利要求9所述的方法,其特征在于,递增与第一线程相关联的所述虚拟时钟包含将与第一线程相关联的虚拟时钟递增1。11.如权利要求9所述的方法,其特征在于,初始化与第二线程相关联的所述虚拟时...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。