黑马程序员技术交流社区

标题: 锁的问题。 [打印本页]

作者: guobin_lu    时间: 2013-3-31 23:16
标题: 锁的问题。
  1.      public void Test(int i)
  2.         {
  3.             lock (this)
  4.             {
  5.                 if (i > 10)
  6.                 {
  7.                     i--;
  8.                     Test(i);
  9.                 }
  10.             }
  11.         }
复制代码
这样会不会出现死锁
作者: 赵海洋    时间: 2013-3-31 23:24
代码只有这么一段?如果i是小于10的,不会执行if语句,如果i>10,会递归,但最后i会小于10,然后返回,这一段应该不会有死锁。
作者: DWC_5101    时间: 2013-3-31 23:25
不会死锁。
测试代码:
    public class Program
    {
        private static void Main(string[] args)
        {
            MyClass mc = new MyClass();
            mc.Test(1000);
            Console.WriteLine("运行结束");
            Console.ReadKey();
        }
    }

    class MyClass
    {
        public void Test(int i)
        {
            lock (this)
            {
                if (i > 10)
                {
                    i--;
                    Test(i);
                }
            }
        }
    }
作者: 杜磊    时间: 2013-4-1 22:56
好吧,这是微软的面试题,你居然拿到这里来问。
正解是,不会死锁。
加分回答是,因为参数是值类型的,只用值传递就行了,而值传递就是把值复制一份传到方法里。
假如这时候的参数是一个引用类型的参数,则会产生死引用。
死锁这个问题,是多线程里才有的概念。
这里不涉及到多线程,所以讨论死锁不死锁没有意义。
作者: 张正强    时间: 2013-4-2 07:36
杜磊 发表于 2013-4-1 22:56
好吧,这是微软的面试题,你居然拿到这里来问。
正解是,不会死锁。
加分回答是,因为参数是值类型的,只用 ...

正解啊,Lz真的不懂???还是......




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2