看到一道.net的面试题,下面附上题目和网上的答案(注意答案是错误的)

     根据线程安全的相关知识,分析以下代码,当调用test方法时i>10时是否会引起死锁?并简要说明理由。

        public void test(int i)
        {
            lock (this)
            {
                if (i > 10)
                {
                    i--;
                    test(i);
                }
            }
        }

        网上的答案:不会发生死锁,(但有一点int是按值传递的,所以每次改变的都只是一个副本,因此不会出现死锁。但如果把int换做一个object,那么死锁会发生)

        答案确实是不会发生死锁,但理由是错的,看看MSDN上的解释:

        Lock确保当一个线程位于代码的临界区时,另一个线程不进入临界区。如果其他线程试图进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放。

        原来的递归明明在一个线程中,哪来的阻塞呢。

相关文章:

  • 2021-12-10
  • 2021-05-19
  • 2022-12-23
  • 2022-12-23
  • 2021-11-23
  • 2022-12-23
  • 2021-07-05
  • 2021-12-12
猜你喜欢
  • 2022-12-23
  • 2021-12-23
  • 2021-07-22
  • 2022-12-23
  • 2021-04-09
相关资源
相似解决方案