Multithreading 一次Helgrind运行是否足以保证给定的多线程实现是无数据竞争和无死锁的?
我有一个多线程实现,我想用Helgrind测试它的死锁。Multithreading 一次Helgrind运行是否足以保证给定的多线程实现是无数据竞争和无死锁的?,multithreading,debugging,parallel-processing,deadlock,valgrind,Multithreading,Debugging,Parallel Processing,Deadlock,Valgrind,我有一个多线程实现,我想用Helgrind测试它的死锁。 我已经运行了它们,并根据生成的输出成功地删除了所有数据争用和死锁。现在我想知道Helgrind是如何检测这些错误的。它是从源代码中生成所有可能性并基于这些可能性进行分析,还是仅基于它看到的运行时交织的特定实例进行分析?根据经验,我知道Valgrind工具DRD(类似于Helgrind)只查找在运行时遇到的错误,我很确定Helgrind和任何其他Valgrind工具也是如此 另外,生成复杂程序的所有可能结果是不可行的,特别是当它是线程化的时
我已经运行了它们,并根据生成的输出成功地删除了所有数据争用和死锁。现在我想知道Helgrind是如何检测这些错误的。它是从源代码中生成所有可能性并基于这些可能性进行分析,还是仅基于它看到的运行时交织的特定实例进行分析?根据经验,我知道Valgrind工具DRD(类似于Helgrind)只查找在运行时遇到的错误,我很确定Helgrind和任何其他Valgrind工具也是如此
另外,生成复杂程序的所有可能结果是不可行的,特别是当它是线程化的时候。我根据经验知道Valgrind工具DRD(类似于Helgrind)只会发现在运行时遇到的错误,我非常确定在Helgrind和任何其他Valgrind工具的情况下也是如此
此外,生成复杂程序的所有可能结果是不可行的,尤其是当它是线程化的时。的确如此。Helgrind只尝试验证已执行的代码,不考虑未执行的代码。即使在给定的运行中没有损坏/损坏,它也会报告可能的争用条件或锁冲突。这是多线程程序的典型问题,这些程序遵循共享内存、信号量等常规设计范式。您无法通过单独测试来证明它们是正确的。您的选择是:i)证明程序设计本身是正确的,并且源代码实现了设计;这需要大量的工作,或者,ii)使用不同的多线程范例,比如通信顺序流程。CSP尤其具有吸引力,因为它有效地保证,如果您有可能出现死锁,那么您将在testingIndeed中体验它(从而检测到它)。Helgrind只尝试验证已执行的代码,不考虑未执行的代码。即使在给定的运行中没有损坏/损坏,它也会报告可能的争用条件或锁冲突。这是多线程程序的典型问题,这些程序遵循共享内存、信号量等常规设计范式。您无法通过单独测试来证明它们是正确的。您的选择是:i)证明程序设计本身是正确的,并且源代码实现了设计;这需要大量的工作,或者,ii)使用不同的多线程范例,比如通信顺序流程。CSP尤其具有吸引力,因为它有效地保证,如果您有可能出现死锁,那么您将在测试中体验它(从而检测到它)