面试中的一个小问题引发的思考

public void Fun(int i)
{
     lock(this)
    {
        if(i>10)
            i--;
        Fun(i);
    }   
}    

问题:上面的代码是否会发生死锁?

这个问题其实考察的是:this和lock这两个关键字。如果对this不是很熟悉的话,肯定会回答,会发生死锁。其实不然,这里并不会发生死锁。这是因为:this:代表的是当前对象,若果将代码变成这样的形式:

在C#中,this关键字代表当前实例,我们可以用this.来调用当前实例的成员方法,变量,属性,字段等;

public class Demo
{
    static void Main()
    {
        Fun(14);
    }
}

public void Fun(int i)
{
     lock(this)
    {
        if(i>10)
            i--;
        Fun(i);
    }   
}    

此时,我们可以看到this代表的是Demo这个对象。因此,这里lock锁定的是Demo这个对象。所以,锁定的对象与i值无关,因此不会发生死锁。

原文地址:https://www.cnblogs.com/acoll/p/4098006.html