public void test1(int i)
{ lock (this)
{
if (i > 10)
{
i--;
test1(i);
}
}
}
void main()
{
test(22)
}这个是不会死锁的
为什么?当test(22)里面的时候不是将this锁住了嘛,test(21)的时候不是要等待释放吗,这样岂不是会死锁吗?
{ lock (this)
{
if (i > 10)
{
i--;
test1(i);
}
}
}
void main()
{
test(22)
}这个是不会死锁的
为什么?当test(22)里面的时候不是将this锁住了嘛,test(21)的时候不是要等待释放吗,这样岂不是会死锁吗?
{
Object o = new object();
public void test1(int i)
{ lock (o)
{
if (i > 10)
{
i--;
test1(i);
}
}
}
}
A a = new A();
a.test1(22);
我也试了,没有死锁。
另外 lock 也起作用 锁过的,再打开,最后能退出来
关键是我感觉 它调用test1(21)的时候就会死锁了呀 (因为在调用test1(22)的时候已经锁住了this,test1(21)的时候是要等待释放才能继续啊)
lock了有什么用处,在什么情况下用?
lock锁住了 >10 的情况,接下来就是开锁的问题了
换个测试例子:test(12),断点跟踪一下就明白了。
知道是什么顺序 ,但是我奇怪的就是:
比如test(12)
进来的时候是锁住了this,对吧?然后往下走,到了
if (i > 10)
{
i--;
test(i);
}
这个时候i=11,所以又要调用函数,到test(11)(注意这个时候test(12)的lock锁还没有释放掉),test(11)的时候又要lock(this),但此时锁还没释放,不是要等待嘛?为什么没有等待?