C++死锁和数据竞争检查工具

数据竞争

代码地址:存在数据竞争

valgrind --tool = helgrind ./thread

信息解读:

1-线程创建信息,表明为 线程 3

image20250108200134322.png

2-global_variable 变量可能存在数据竞争

image20250108200631379.png

死锁

代码地址:死锁代码

valgrind --tool = helgrind ./thread

运行就会卡住,Ctrl+C 停止程序,就可以看到相关输出了

image20250108204044573.png
image20250108204308194.png

我觉得这个输出非常让人不满意,只可以检测出由死锁问题导致的程序卡住,但是没有提示究竟的哪些锁(我们代码中由两把锁,名字为 mutexA 和 mutexB),不如用 gdb 进行调试死锁,信息比这个全面一些。

而且还有个问题就是,如果你锁住的内容很多,输出就会很多,非常恶心。