public void WriteToCell(int n)
        {
            lock (this)
            {
                if (readFlag)
                {
                    try
                    {
                        Monitor.Wait(this);
                    }
                    catch (SynchronizationLockException ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                    catch (ThreadInterruptedException ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                }
                else
                {
                    cellContents = n;
                    Console.WriteLine("WriteToCell:{0}", cellContents);
                    readFlag = true;
                    Monitor.Pulse(this);
                }
            }
        }
正在学习多线程,上面这段代码是一个生产者写数据。如果if后面有else很次都是1.3.5.7。9,不加else是1.2.3.4.5.6.7.8.9,请问加else为什么会这样呀。

解决方案 »

  1.   

    这是你用来学习的代码?这代码根本就是错的http://msdn.microsoft.com/zh-cn/library/c5kehkcz(v=VS.80).aspx通常,应避免锁定 public 类型,否则实例将超出代码的控制范围。常见的结构 lock (this)、lock (typeof (MyType)) 和 lock ("myLock") 违反此准则:如果实例可以被公共访问,将出现 lock (this) 问题。
      

  2.   


    听说某鸟培训有规定,学员必须坚持写blog文章,纳入作业考核,所以……现在有大量误人子弟的博客文章。
      

  3.   

    微软给出的生产者、消费者程序的教程,自己去看吧。http://msdn.microsoft.com/zh-cn/library/yy12yx1f(v=vs.80).aspx