A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© guobin_lu 中级黑马   /  2013-3-31 23:16  /  1111 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1.      public void Test(int i)
  2.         {
  3.             lock (this)
  4.             {
  5.                 if (i > 10)
  6.                 {
  7.                     i--;
  8.                     Test(i);
  9.                 }
  10.             }
  11.         }
复制代码
这样会不会出现死锁

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

4 个回复

倒序浏览
代码只有这么一段?如果i是小于10的,不会执行if语句,如果i>10,会递归,但最后i会小于10,然后返回,这一段应该不会有死锁。
回复 使用道具 举报
不会死锁。
测试代码:
    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
好吧,这是微软的面试题,你居然拿到这里来问。
正解是,不会死锁。
加分回答是,因为参数是值类型的,只用 ...

正解啊,Lz真的不懂???还是......
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马