void test(int i)
{
lock (this)
{
if (i > 10)
{
i--;
test(i);
}
}
}
面试题:当i>10时,是否会发生死锁,为什么?
假定test(15)
单步发现 当i--到10时,执行完了lock块以后,程序又会跳回去执行迭代的test(i),这时候i又会自加,直到14后,完成整个调用。
不太明白为什么会这样,lock应该只能锁引用类型,不能锁值类型的,否则会发生死锁,是这样吗?
(最好的做法是声明一个private的实例,然后锁它,这个我知道)
刚在msdn上看的。对于lock我没用过。感觉挺有意思的。
http://topic.csdn.net/u/20100707/21/4397f902-a578-4ad6-a28c-523dd07a32ad.html
lock关键看锁的是什么对象,this即当前对象的实例,如果有并发线程,则在另外一个线程中无法访问该实例(直到解锁),或者重新声明一个新实例,所以一般都应该锁一个private的实例,这样可以避开不应该出现的死锁假定test(15)
单步发现 当i--到10时,执行完了lock块以后,程序又会跳回去执行迭代的test(i),这时候i又会自加,直到14后
还是不太明白为什么lock块执行完后,迭代的test(i)会自加,直到14后完成整个调用..