您的位置:首页 > 职场人生

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

2014-11-14 19:25 337 查看
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值无关,因此不会发生死锁。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: