Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 一次Helgrind运行是否足以保证给定的多线程实现是无数据竞争和无死锁的?_Multithreading_Debugging_Parallel Processing_Deadlock_Valgrind - Fatal编程技术网

Multithreading 一次Helgrind运行是否足以保证给定的多线程实现是无数据竞争和无死锁的?

Multithreading 一次Helgrind运行是否足以保证给定的多线程实现是无数据竞争和无死锁的?,multithreading,debugging,parallel-processing,deadlock,valgrind,Multithreading,Debugging,Parallel Processing,Deadlock,Valgrind,我有一个多线程实现,我想用Helgrind测试它的死锁。 我已经运行了它们,并根据生成的输出成功地删除了所有数据争用和死锁。现在我想知道Helgrind是如何检测这些错误的。它是从源代码中生成所有可能性并基于这些可能性进行分析,还是仅基于它看到的运行时交织的特定实例进行分析?根据经验,我知道Valgrind工具DRD(类似于Helgrind)只查找在运行时遇到的错误,我很确定Helgrind和任何其他Valgrind工具也是如此 另外,生成复杂程序的所有可能结果是不可行的,特别是当它是线程化的时

我有一个多线程实现,我想用Helgrind测试它的死锁。
我已经运行了它们,并根据生成的输出成功地删除了所有数据争用和死锁。现在我想知道Helgrind是如何检测这些错误的。它是从源代码中生成所有可能性并基于这些可能性进行分析,还是仅基于它看到的运行时交织的特定实例进行分析?

根据经验,我知道Valgrind工具DRD(类似于Helgrind)只查找在运行时遇到的错误,我很确定Helgrind和任何其他Valgrind工具也是如此


另外,生成复杂程序的所有可能结果是不可行的,特别是当它是线程化的时候。

我根据经验知道Valgrind工具DRD(类似于Helgrind)只会发现在运行时遇到的错误,我非常确定在Helgrind和任何其他Valgrind工具的情况下也是如此


此外,生成复杂程序的所有可能结果是不可行的,尤其是当它是线程化的时。

的确如此。Helgrind只尝试验证已执行的代码,不考虑未执行的代码。即使在给定的运行中没有损坏/损坏,它也会报告可能的争用条件或锁冲突。这是多线程程序的典型问题,这些程序遵循共享内存、信号量等常规设计范式。您无法通过单独测试来证明它们是正确的。您的选择是:i)证明程序设计本身是正确的,并且源代码实现了设计;这需要大量的工作,或者,ii)使用不同的多线程范例,比如通信顺序流程。CSP尤其具有吸引力,因为它有效地保证,如果您有可能出现死锁,那么您将在testingIndeed中体验它(从而检测到它)。Helgrind只尝试验证已执行的代码,不考虑未执行的代码。即使在给定的运行中没有损坏/损坏,它也会报告可能的争用条件或锁冲突。这是多线程程序的典型问题,这些程序遵循共享内存、信号量等常规设计范式。您无法通过单独测试来证明它们是正确的。您的选择是:i)证明程序设计本身是正确的,并且源代码实现了设计;这需要大量的工作,或者,ii)使用不同的多线程范例,比如通信顺序流程。CSP尤其具有吸引力,因为它有效地保证,如果您有可能出现死锁,那么您将在测试中体验它(从而检测到它)