8.4.2线程检查器实验.PDFVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
8.4.2 线程检查器实验 本实验学习如何使用英特尔 程检查器来调试 Win32*多线程程序并解决数据竞争、死锁问 题。 (1)寻找潜在的数据竞争 编译和运行Potential 程序的单 程版本 打开\code\Thread Checker\potential_serial 文件夹,双击potential_serial.sln 文件; 在Build 菜单里选择Configuration Manager,然后选择Debug 模式; 在Build 菜单里选择Build Solution,编译相关文件; 在Debug 菜单里选择Start Without Debugging,运行程序。 编译和运行Potential 程序的多 程版本 打开\code\Thread Checker\potential_win 文件夹,双击potential_win.sln 文件; 在Build 菜单里选择Configuration Manager,然后选择Debug 模式; 按如下方式配置项目属性: 选中Debug 模式 (/Zi) 链接时保留Debug 信息 (/DEBUG) 禁止自动优化(/Od) 使用线程安全系统 (/MDd) 使用二进制文件可重定位功能 (/fixed:no) 在Build 菜单里选择Build Solution,编译相关文件; 在Debug 菜单里选择Start Without Debugging,运行程序; 注:Potential 程序的多 程版本中粒子数量和循环次数大幅度减少,以方便英特尔线程检 查器运行。 运行Intel®VTune 性能分析器; 点击New Project; 在Category 栏选择Threading Wizards,在下拉框中选择Intel Thread Checker Wizard; 选 择 刚 才 编 译 好 的 可 执 行 文 件 路 径 ( \code\Thread Checker\potential_win\Debug\potential_win.exe),点击Finish 按钮,开始运行 程检 查器;线程检查器分析完毕后会显示一些诊断报告,双击可观察相应代码; 问题: 为什么会出现这些冲突? (2)解决数据竞争问题 解决前一个实验里英特尔线程检查器诊断出来的那些线程错误。哪些变量可以作为 程中的 共享变量?哪些变量应该作为每个 程的私有变量?哪些变量出于线程同步的考虑,必须保 护起来? 修改好代码中的错误后,重新编译运行,并用 程检查器检测,直到没有诊断错误为止; 当消 代码中的 程问题后,把粒子和循环数量改为之前单线程版本的数量,重新编译运行。 问题: 修改好的多 程程序运行结果和之前的单线程程序一样吗? (3)检测死锁问题 打开\code\Thread Checker\Deadlock\文件夹,双击Deadlock.sln 文件; 在Build 菜单里选择Configuration Manager,然后选择Debug 模式; 按照上一小节实验里的方法配置项目属性; 在C/C++菜单中,选择Command Line,填入/Qtcheck,如图所示; 在Build 菜单里选择Build Solution,编译相关文件; 在Debug 菜单里选择Start Without Debugging,运行程序。 问题: 运行结果正确吗?为什么? 用 程检查器分析程序 运行英特尔 程检查器; 点击New Project; 在Category 栏选择Threading Wizards,在下拉框中选择Intel Thread Checker Wizard; 选 择 刚 才 编 译 好 的 可 执 行 文 件 路 径 ( \code\ Thread Checker\Deadlock\Debug\Deadlock.exe),点击Finish 按钮,开始运行 程检查器; 运行结果可能是下面两张图其中一张,因为死锁并不一定每次都发生,如图8.11、8.12 所 示: 图8.11 诊断报告显示死锁并未发生,但线程检查器仍然检测出潜在的死锁风险, 图中用黄色标出 图8.12 程检查器检测到了死锁发生并列出来, 此时用户需要强制关闭程序运行的DOS 窗口 双击诊断列表中的任意一条 (错误或者警告),研究相应代码和错误或警告发生的原因。

文档评论(0)

Lxq3610 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档