c# - 为什么这段代码中的锁不起作用?

标签 c#

我写了简单的代码(附上),但我不明白为什么某些 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/

相关文章:

c# - 为什么泛型类型在方法签名中出现两次?

c# - SQL Server Express 的连接字符串

c# - 调用 Device.RuntimePlatform 导致运行时异常

c# - Windows服务中的计时器未调用经过的事件

c# - Bootstrap Datatables JSON 类解析

c# - SSIS 脚本组件忘记了我的变量

c# - 两个类,相同的方法,一个对象?

c# - VB 到 C# 的翻译

c# - 使用反射在签名为 : SomeObject. 的对象实例上调用泛型方法 SomeGenericInstanceMethod<T>(T argument)

c# - 我如何在 ASP.NET 中使用图像作为我的 html 邮件的背景