如何解决死锁(多线程程序)

如何解决死锁(多线程程序)

我需要运行一个程序 100 次,每次几个小时,这在以串行方式运行时没问题,只是需要很长时间,但是当我尝试使用 GNU 并行或 bash 中的简单“&”对其进行并行化时,它会挂起/freezes,我怀疑死锁,但我还没有编写程序,所以无法调试它。

我想可能性很小,但是有没有一种方法(也许是一种简单的方法)可以以某种方式与 Linux 上的其他所有东西隔离或隔离来运行应用程序? (无需使用多个虚拟盒:P)

答案1

这个程序在做什么 - 你知道它在使用什么(共享内存,互斥体,也许具有相同名称的文件,并且每个实例都覆盖它,你可以检查 tmp 目录)。试着斯特雷斯它?

不知道你的问题的严重程度,但你可以使用码头工人-https://wiki.archlinux.org/index.php/Docker创建轻量级容器或查看奎贝斯Os创建隔离环境https://qubes-os.org/或尝试使用该程序chrooted环境

答案2

正如 KaP 所说:strace it。您可以使用 -p 在 strace 挂起时启动它。

如果以不同用户身份运行(每个用户运行一个副本),您能否重现该问题?

如果幸运的话,只有当程序同时启动时,程序才会死锁。如果是这种情况,请使用 GNU Parallel 中的“--delay”来延迟开始下一个作业。

相关内容