c# - 如何在 C# 中找出并防止死锁

标签 c# asp.net .net c#-4.0 deadlock

<分区>

我刚刚在 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();
}

Read More

关于c# - 如何在 C# 中找出并防止死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15361810/

相关文章:

c# - .Net 如何为用户控件的属性设置 IsReadOnly

c# - asp.net中如何删除cookies

c# - 错误: Fatal error encountered attempting to read the resultset

c# - 如何在 Entity Framework Core 中按周数排序?

c# - Windows 显示设置导致 Screen.PrimaryScreen.Bounds.Width 不正确

c# - 如何使用 Entity Framework 6 在 ASP.NET MVC 5 中保存自定义模型?

c# - Azure设置内部url的可用性测试

c# - 当不能简单地重载时混合可选参数和参数

c# - Linq2Sql 未在 C# 类中显示

asp.net - 有关使用字段子集的 View 模型和模型更新的最佳实践