进程有大约 10 个线程,所有 10 个线程都进入死锁状态(假设所有线程都在等待互斥变量)。
如何从 DEADLOCK 状态释放进程(线程)? .
有没有办法杀死低优先级线程?(在多进程情况下,当所有进程处于死锁状态时,我们可以杀死低优先级进程)。
我们能否将该死锁进程附加到调试器并为 Mutex 变量分配适当的值(假设所有线程都在等待互斥体变量 MUT 但它的值为 0,我们能否通过调试器将 MUT 值分配为 1)。
最佳答案
如果应用程序中的每个线程都在互相等待,而没有一个线程被设置为超时,那么你就搞砸了。您可能能够在调试器或其他东西中运行该应用程序,但通常会出于某种原因获取锁 - 手动强制互斥锁由未合法获取它的线程拥有可能会导致一些大问题(线程之前拥有的它仍然会尝试释放它,如果互斥锁被意外拉走,其结果可能是不可预测的。可能导致意外异常,可能导致互斥锁在仍在使用时被解锁。)无论如何,它失败了互斥锁的全部目的,所以你只是掩盖了一个更大的问题。
有两种常见的解决方案:
synchronized
将互斥锁嵌入到语言中,这有点困难。或 lock
块,但它几乎总是可能的。如果您等待锁定超时,请释放您拥有的所有锁定/互斥锁,稍后再试。 关于multithreading - 多线程编程中是否可以恢复死锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3850995/