c - Helgrind 在运行时停止程序
问题描述
Helgrind 在运行时冻结。必须应用CTRL+C ( SIGINT
) 才能退出运行。
我编写了一个可以正确执行的程序,如果没有使用--tool=helgrind
. 但是当使用 helgrind 时,程序会在运行时停止。
我没有发现任何导致 helgrind 以这种方式运行的典型问题。有任何提示吗?我也找不到任何问题vgdb
。
编辑:该程序使用信号量和 pthreads。
编辑:添加一堆fprintf
输出使 helmgrind 工作得很好。为什么呢?
解决方案
找到了答案。
使用信号量的值作为条件变量非常慢。因此,由于 sem_post/sem_wait 是原子操作,并且 helgrind 具有“较慢的检查”(非原子),因此我的程序更新信号量的方式更快,然后 helgrind 重新检查信号量。并因此冻结了地狱。所以线程计数器或其他类型的条件变量解决了这个问题。
推荐阅读
- java - Firebase Firestore Android发生变化时如何实现通知?
- angular - Angular 服务注入设计模式与两个密切相关的服务
- postgresql - 在 postgresql 的查询结果中返回不同的列
- r - 按月对 xts 进行分组
- oauth2-playground - 请求访问令牌时获取 HTTP 400
- django - 从django中的父类实例中查找子类中的对象
- python - python:如果文件在每一行中都包含相同的字符串,则 line.startswith(str) 将不起作用
- docker - 使用主机上的 nginx 反向代理在 docker 中部署 nextjs 应用程序
- html - 禁用 Dailymotion 共享选项
- confluent-platform - 如何查找当前哪个 Schema Registry pod/node 是主节点