如何在g ++/std :: mutex下配置锁定争用?

kfm*_*e04 6 c++ multithreading c++11

是否有任何开源工具或者是否有任何技术/代码可用于分析std::mutex运行代码中的争用程度?

我想计算每个std::mutex实例的粒度(按时间或数量)的锁争用百分比.如果有一个不需要重新编码的插入式工具,那就更好了.

我正在寻找一种可以使用std::thread和g ++的技术:在应用程序的退出处,我想将互斥争用统计信息的配置文件转储到日志文件中,以便我可以在实际运行时监视线程代码的质量上下文.

注意

我见过这个帖子.不幸的是,答案要么需要一大笔现金,要么在Windows上运行.

Nic*_*rca 4

我推荐诸如AMD CodeXLIntel VTune之类的东西。CodeXL 是免费的;英特尔 VTune 拥有免费的学术许可证(如果适用),或者您可以尝试 30 天试用。他们都在 Linux 下工作。

在最基本的层面上,这些工具可以通过测量您在std::mutex. 每个工具中还包含其他更高级的分析技术/工具,可以为您提供进一步的帮助。您根本不需要更改代码,尽管您可能需要检查是否使用调试符号进行编译和/或没有剥离二进制文件。您可能还希望远离 、 等极端优化级别-O3,而坚持使用-O1-O2-Og

PS:与所有优化查询一样,我必须提醒您在开始优化之前始终衡量性能问题的实际位置。无论您多么担心锁争用,请在花费大量精力尝试缓解可能存在或可能不存在的任何锁争用之前,先使用分析器验证您的担忧。