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值无关,因此不会发生死锁。