为什么删除锁会减少Helgrind中的错误?

时间:2012-10-26 08:38:04

标签: mutex race-condition locks

我正在完成我的第一个并行编程任务,并且很少知道我在整个互斥锁定情况下做了什么。

我正在尝试使用Helgrind来查找我的代码中的竞争条件,当我知道它们应该是锁定时,Helgrind会返回惊人的7300错误!但是,删除关键部分中的某些锁实际上会将我的错误减少到6000,尽管我知道这是需要锁定的区域。

可能导致这种情况的原因是什么?也许作为一般性声明,有人可以给我一个很好的资料来源,为新手解释互斥锁吗?谢谢!

1 个答案:

答案 0 :(得分:1)

首先,Helgrind不仅检测竞赛,还检测互斥锁的误用,包括非递归互斥锁的递归锁定,解锁之前未被锁定的互斥锁等。通过删除对pthread_mutex_*的调用,您可能只是删除了因滥用互斥API而导致的错误。 Helgrind manual page对Helgrind检测到的错误类型有广泛的描述。

其次,像Helgrind这样的动态竞争探测器因产生许多错误消息而臭名昭着 - 通常太多而无用。您应该首先使用尽可能小的代码片段来尝试它,这样您就不会被错误报告所淹没。