logo资料库

数据竞争检测文献阅读.pdf

第1页 / 共34页
第2页 / 共34页
第3页 / 共34页
第4页 / 共34页
第5页 / 共34页
第6页 / 共34页
第7页 / 共34页
第8页 / 共34页
资料共34页,剩余部分请下载后查看
数据竞争检测入门文献阅读 2014 /10 /21 LOGO
姚欣洪. 基于线程摘要的C/C++数据竞争检测研究[D]. 北京邮电大学, 2011. www.ppt5u.com
基于线程摘要的C/C++数据竞争检测研究 数据竞争是常见的并发程序错误:在共享内存的并发程序中,当 有两个线程同时访问(至少有一个访问是写操作)同一个内存地址, 并且这两个访问缺乏锁同步时,这两个线程将可能发生数据竟争。如 何检测数据竞争一直是计算机技术的热门研究领域,尽管针对数据竞 争检测的研究超过了30年,但是当今的并发程序仍然存在着许多有 害的数据竞争。 这篇文章提出一种检测C/C++数据竞争的算法,根据数据竞争 的定义提出两个线程不可能发生数据竞争的四个条件,在DTS_CPP 框架的基础上实现了数据竞争检测框架。最后对一些实际的例子进 行检测,分析检测结果来证明此方法的有效性。 www.ppt5u.com
基于线程摘要的C/C++数据竞争检测研究 文章主要研究内容 【】数据竞争的定义及发生条件 (充分认识数据竞争的条件) 【】基于函数摘要和线程摘要的的数据竞争检测算法 (扩展DTS_CPP系统,函数摘要->线程摘要->线程访问特征->序列化) 【】排除法进行数据竞争检测 (根据线程不可能发生数据竞争的条件,对初始化的可能发生数据竞争的 集合刷选、精细) www.ppt5u.com
基于线程摘要的C/C++数据竞争检测研究 相关研究 静态测试 静态测试通常会将源代码或者中间代码转换成某种中间的数据 结构,如抽象语法树或者控制流图,并组织好程序的符号表,在此基础 上用相应的算法来分析。(数据流分析,抽象解释,符号执行,模 型检测,定理证明,类型推导) 动态测试 动态测试将被测程序在相对真实环境下运行,观察其运行时的行 为、功能、逻辑、输出等属性来发现其可能存在的问题。根据作用 动态测试又可以分为单元测试、集成测试,系统测试以及回归测试等 (插桩模拟、渗透测试) www.ppt5u.com
基于线程摘要的C/C++数据竞争检测研究 竞争条件 当并发程序中不同的线程的执行依赖于某些共享的状态时,就可 能发生竞争条件。所有对于共享状态的访问都必须进行互斥操作,否 则将可能导致有害的不确定状态。 常见的故障类型: 【】时间检查与时间使用产生的竞争条件(TOCTOU) 一个给定的资源的在时间检测和时间利用间存在漏洞的窗口 时间窗口 opendir(filename) . . . If(stat(filename,&dirstat)==0) return ; www.ppt5u.com
基于线程摘要的C/C++数据竞争检测研究 【】双检锁问题 通常情况下,在实现多线程环境中的“懒初始化”(变量在第一次被 访问时才初始化,以后每次访问都使用第一次初始化的值)时来避免加锁 操作,典型的应用就是单例模式 。 双检锁 helper=new Helper()操作包含多个步骤 1) 分配内存 2) 在内存的位置上调川构造函数 3) 将内存地址赋值给helper www.ppt5u.com
基于线程摘要的C/C++数据竞争检测研究 【】不可重入问题导致的数据竞争 一个函数被重入,表示这个函数没有执行完成.由于外部因素或者内 部调用,又一次进入该函数执行。一个函数要被重入,只有两种情况: a)多个线程同时执行这个函数; b)函数自身(可能是经过多层调用之后)调用自身。 一个函数要成为可重入的,必须具有以下几个特点: l)不使用任何(局部)静态或者全局非const变量; 2)不返回任何(局部)静态或者全局的非const变量的指针; 3)不调用任何不可重入的函数。 www.ppt5u.com
分享到:
收藏