多线程程序的冲突与死锁检测

来源 :中国人民大学 | 被引量 : 0次 | 上传用户:dasaqa
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
计算机已经进入多核时代,从Intel,AMD,Sparc到PowerPC,CPU的设计者们不再追求单核的高频率而是向多核发展,现在的双核乃至四核CPU已经成为了主流。多核的出现将迫使改变原有的程序设计观念,可以设想的是,未来的计算机程序将会是并行化的并且能充分利用多CPU能力的。并发通常能够让系统资源得到最有效的利用,提高资源的利用率是实现计算机系统性能最大化的关键所在,通常当串行执行方案非常低效时,CPU处于闲置状态,并行可以提高系统整体的资源利用率。同时很多软件是自然的并发问题。  为了使程序并行化,常用的方法是使用多线程技术,但是多线程只有运用恰当,才能使硬件资源得到更加充分的利用,从而达到提高计算机性能的目标。反之,如果运用不当,多线程技术不但会降低计算性能,还可能导致应用程序发生一些不可预测的行为,甚至出现难以解决的故障,本论文主要是解决这些问题。目前已经出现了一些针对C/C++等Native语言的检测工具,并将开发一个针对java语言,能检测多线程程序冲突和死锁的工具。  其中,冲突检测的算法上,实现了一种基于lockset和happen-before算法的新算法,这种算法结合了lockset和happen-before算法的优势,合理的应用happen-before算法既消除了lockset算法中容易出现的false positive,同时保留了lockset算法的高效。在大型程序下,其性能仍然是可以接受的。在死锁检测算法中,实现了一种基于环的死锁检测算法,测试表明这种算法能有效检测程序中的由加锁构成环而引起的死锁。  在前台数据抽取引擎中,开发了一个Eclipse plugin,用户只需要导入其Java程序,启动后台即可得出关于冲突和死锁的诊断报告。在前台Java程序信息(例如地址,线程ID,锁集合等)的抽取中我充分利用了新版JDK的instrument功能,jvmtiagent和asm等二进制instrument工具,测试表明,本工具能截获大部分和线程相关的事件,从而提高了检测的准确度。  在工具的开发过程中,性能始终是困扰我最多的地方,因为一个大型程序通常会有上百万次的内存访问,这其中有很多是不构成datarace和deadlock的,如何正确而又高效地过滤无用信息,如何设计正确的数据结构高效地存储海量数据等这些问题在本论文中得到了有效地解决。
其他文献
随着计算机技术的发展,用计算机进行人群紧急疏散模拟成了近年来在计算机图形学和虚拟现实领域兴起的一个研究热点。这种运用计算机进行的人群紧急疏散行为模拟和研究,能在各种
在过去的二十年中,互联网取得了巨大的成功。互联网的成功,很大程度上归功于它简单易行的通信模式:一个节点只需要按照指定的协议发送和接收数据包,而不必了解负责传输数据的网络
数据挖掘是近些年来发展起来的新技术,通过数据挖掘,人们可以发现数据背后隐藏的有价值的、潜在的知识,为科学地进行各种商业决策提供强有力的支持。当今,数据挖掘已发展成一门跨
学位
随着Web应用的快速增长,XML数据逐渐成为数据存储的一种新的标准。作为XML的标准查询语言XQuery,其处理技术也得到了国内外研究人员广泛关注,形成了两套相对成熟查询处理方式(基
传统数据库系统的处理对象主要是相对稳定的数据集。而在当今一些新的应用中,数据都以连续的、流的形式出现,而不是有限的存储数据集。这种动态的流数据其应用领域非常多,像股市
应对日益复杂化的公共安全事件,仅仅依靠政府警务力量是不够的,而是需要许多社会组织的参与。这就要求公共安全系统能够按需动态的集成和整合各种社会信息资源,供警务部门决策指
在实际生活中,传统模式识别方法对于大规模数据的分类和函数逼近并不具有理想的性能。数据量和数据的复杂性以及数据样本的不平衡性,导致分类器在学习过程中的存储消耗大、学习
恐怖主义由来已久,近年来恐怖袭击事件时常发生,严重威胁到人类的生命财产安全。“9.11”恐怖事件、巴厘岛爆炸案、云南火车站暴力恐怖事件等都说明了恐怖组织的残忍,对社会造成
Adhoc网络是一种分布式的无线多跳网络。节点依赖彼此间的合作实现信息的交流。尽管针对军事行动、抢险救灾等特殊应用的Adhoc网络可以确保节点间相互合作,但是当节点分别属于