我写了简单的代码(附上),但我不明白为什么某些 block 上的锁没有锁定作用域。
代码:
object locker = new object();
private void foo(int i)
{
Console.WriteLine( string.Format( "i is {0}", i ) );
lock( locker )
{
while( true )
{
Console.WriteLine( string.Format( "i in while loop is {0}", i ) ) ;
foo( ++i );
}
}
}
我希望 while 循环中对 foo 方法的调用将一直等到锁定器被释放(锁定范围) - 但是所有带有++i arg 的 foo 调用都可以进入锁定器 block 。
最佳答案
这里使用的锁是可重入的。它会阻止另一个线程进入监视器,但是持有锁的线程不会被阻塞。
关于c# - 为什么这段代码中的锁不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10099474/