<分区>
我刚刚在 5 分钟前接受采访,我没有回答 3 个问题,有人可以帮助我吗。
问题:
如何在多线程应用程序函数中寻找死锁场景并加以预防?
我给出的答案:
我给出了死锁和锁、互斥量、监视器、信号量的定义。他告诉我,这些都是工具,但是如何寻找死锁场景,因为当我们盲目地使用这些工具时,它会降低性能,他说:(
请帮助我理解这一点。
<分区>
我刚刚在 5 分钟前接受采访,我没有回答 3 个问题,有人可以帮助我吗。
问题:
如何在多线程应用程序函数中寻找死锁场景并加以预防?
我给出的答案:
我给出了死锁和锁、互斥量、监视器、信号量的定义。他告诉我,这些都是工具,但是如何寻找死锁场景,因为当我们盲目地使用这些工具时,它会降低性能,他说:(
请帮助我理解这一点。
最佳答案
听起来您在解释死锁如何发生以及如何避免死锁时遇到了问题。
当每个线程(至少两个线程)试图获取已被另一个线程锁定的资源的锁时,就会发生死锁。锁定在资源 1 上的线程 1 尝试获取资源 2 上的锁。同时,线程 2 锁定了资源 2,并尝试获取资源 1 上的锁。两个线程永远不会放弃他们的锁,因此死锁发生。
避免死锁的最简单方法是使用超时值。 Monitor类(system.Threading.Monitor)可以设置获取锁的超时时间。
例子
try{
if(Monitor.TryEnter(this, 500))
{
// critical section
}
}
catch (Exception ex)
{
}
finally
{
Monitor.Exit();
}
关于c# - 如何在 C# 中找出并防止死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15361810/