namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        public void test(a a,int i)
        {
            lock(this)
            {
                if (i > 10)
                {
                    i--;
                     test( a,i);
                }
            }
        }        private void button1_Click(object sender, EventArgs e)
        {
            a a = new a();
            test(a,12);
        }
     public class a
        { 
           public a()
            {            }
        }
    }
}
调用了lock函数,但是却没发生死锁,为什么呢?

解决方案 »

  1.   

    你锁的是Form1,而它没有什么被“写”。都是你的test()里面的内部变量在读写。
      

  2.   

    lock(this)中锁定的是当前的对象,即Form12楼说的有道理。
      

  3.   

    仔细看看
    http://msdn.microsoft.com/zh-cn/library/c5kehkcz(v=vs.80).aspx
      

  4.   

    你在递归里面加锁 当然不会出问题了 因为lock并不是锁住的意思,而是获取了当前对象的同步指针,如果获取不到 就以为这这个指针被其他线程使用着,但是问题是,你的整个递归都是在一个线程里面,所以在此获取也能获取到。