我正在做我的第一个并行编程任务,并且对我在整个互斥锁情况下所做的事情知之甚少。
我正在尝试使用 Helgrind 在我的代码中定位竞争条件,当我在我认为应该在的位置锁定时,Helgrind 返回一个惊人的 7300 错误!但是,删除关键部分中的一些锁实际上会将我的错误减少到 6000,尽管我知道这是一个需要锁的区域。
这可能是什么原因造成的?也许作为一般性陈述,有人可以给我一个很好的参考资料,为新手解释互斥锁吗?谢谢!
我正在做我的第一个并行编程任务,并且对我在整个互斥锁情况下所做的事情知之甚少。
我正在尝试使用 Helgrind 在我的代码中定位竞争条件,当我在我认为应该在的位置锁定时,Helgrind 返回一个惊人的 7300 错误!但是,删除关键部分中的一些锁实际上会将我的错误减少到 6000,尽管我知道这是一个需要锁的区域。
这可能是什么原因造成的?也许作为一般性陈述,有人可以给我一个很好的参考资料,为新手解释互斥锁吗?谢谢!
首先,Helgrind 不仅可以检测竞争,还可以检测互斥锁的滥用,包括递归锁定非递归互斥锁、解锁以前未锁定的互斥锁等。通过删除对 的调用pthread_mutex_*
,您可能只是删除了由于以下原因导致的错误滥用互斥量 API。Helgrind手册页对 Helgrind 检测到的错误种类进行了详尽的描述。
其次,像 Helgrind 这样的动态竞争检测器因产生许多错误消息而臭名昭著——通常,太多而无用。您应该首先尝试使用尽可能小的代码片段,这样您就不会被错误报告所淹没。