c# - 造成僵局

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

我有一些代码如下所示。这会造成僵局吗?

private readonly object objectLock = new object();

public void MethodA()
{
    lock(objectLock)
    {
       MethodB();
    }
}

public void MethodB()
{
    lock(objectLock)
    {
      //do something
    }
}

更新:将有 2 个线程运行

最佳答案

不——但这会是:

private readonly object objectLockA = new object();
private readonly object objectLockB = new object();

public void MethodA()
{
    lock(objectLockA)
    {
    lock(objectLockB)
    {
       //...
    }
    }
}

public void MethodB()
{
    lock(objectLockB)
    {
    lock(objectLockA)
    {
      //do something
    }
    }
}

如果您并行调用这两个方法(从 2 个不同的线程),那么您将遇到死锁...

关于c# - 造成僵局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7835496/

相关文章:

c# - 在多线程应用程序中跟踪任务号

c# - 从 SQL Server dbmail 创建/生成 '.eml' 文件

c# - 在哪里可以找到简单的红黑树实现?

c# - 如何将 Lucene.NET RangeQuery 转换为 NumericRangeQuery 以进行日期范围搜索?

.net - 添加 "Today Button"到日历控件

.net - TCP是否使用自己的线程?

multithreading - 线程启动而不调用它的启动方法

c++ - pselect() 与循环中的 accept()

c# - JSON 类型字符串的正则表达式

c# - 是否有用于 C# 的 CSS 解析器?