答案错了吧lock (this)
是锁住myClass的对象,又不是int的。

解决方案 »

  1.   

    例如以下代码就不会发生死锁    class Clerk
        {        private string Name;
            public Clerk(string name )
            {
                this.Name = name;
            }
            public void test(Clerk clk)
            {            lock (this)
                {
                    if (clk.Name.Length < 10 )
                    {
                        clk.Name += "a";
                        Console.WriteLine(clk.Name+"----"+ Thread.CurrentThread.ManagedThreadId); 
                        test(clk);
                                        }            }
            }
            public void TestMultiThread()
            {
                Clerk c = new Clerk("wiky");
                test(c);
            }    }    class Program
        {
            static void Main(string[] args)
            {            Thread[] threads = new Thread[10];
                Clerk c = new Clerk("wiky");
                for (int i = 0; i < 10; i++)
                {
                    Thread t = new Thread(new ThreadStart(c.TestMultiThread));
                    threads[i] = t;
                }
                for (int i = 0; i < 10; i++)
                {
                    threads[i].Start();
                }            Console.WriteLine("end");
                Console.ReadLine();
            }
        }
      

  2.   

    to xiaoaowanghu(笑傲网湖)我也是这样认为的,答案错了,准确的说答案的解释错了
     btw :lock不用于 value-type ,首先编译不过
      

  3.   

    microsoft 推荐用 private reference value  作为lock 的 参数
      

  4.   

    一个线程一个lock还谈什么死锁?搞笑。
    还要来个匪夷所思的回答,晕
      

  5.   

    to danjiewu(阿丹) 请问阁下所指的“匪夷所思的回答”是这段吗
    答:不会发生死锁,(但有一点int是按值传递的,所以每次改变的都只是一个副本,因此不会出现死锁。但如果把int换做一个object,那么死锁会发生) 
      

  6.   

    我认为这是道好题,考你对lock和线程的理解,还有就是在.net环境下的lock和线程的使用,应该说是基础道,你的概念如果不清楚,很难回答正确的,即使回答正解,如果能讲明白才是真懂了