首页 > 解决方案 > Helgrind 在运行时停止程序

问题描述

Helgrind 在运行时冻结。必须应用CTRL+C ( SIGINT) 才能退出运行。

我编写了一个可以正确执行的程序,如果没有使用--tool=helgrind. 但是当使用 helgrind 时,程序会在运行时停止。

我没有发现任何导致 helgrind 以这种方式运行的典型问题。有任何提示吗?我也找不到任何问题vgdb

编辑:该程序使用信号量和 pthreads。

编辑:添加一堆fprintf输出使 helmgrind 工作得很好。为什么呢?

标签: cpthreadsvalgrind

解决方案


找到了答案。

使用信号量的值作为条件变量非常慢。因此,由于 sem_post/sem_wait 是原子操作,并且 helgrind 具有“较慢的检查”(非原子),因此我的程序更新信号量的方式更快,然后 helgrind 重新检查信号量。并因此冻结了地狱。所以线程计数器或其他类型的条件变量解决了这个问题。


推荐阅读