日期:2014-05-17  浏览次数:20812 次

再问一下一个lock的问题。

 public class TestClass
    {
        public int Column1 { set; get; }
        public int Column2 { set; get; }
          //private object obj = new object();
        object lockindex = 0;


        public void TestMethodA(int i)
        {
            lock (lockindex)
            {
                while (true)
                {
                     Console.WriteLine(Thread.CurrentThread.Name +":"+ lockindex.GetType());
                    Thread.Sleep(10);                }
                //Console.WriteLine(Column1);
            }
        }

        public void TestMethodB()
        {
            Console.WriteLine("B_Start");
            Console.WriteLine("B_End");
        }
    }


这里 obj  与 lockindex 竟然可以达到相同的作用。
之前一直说不能lock值类型的对象。会每次都装箱,但是现在感觉一点问题也没有。
为什么会这样呢?
lock??线程??

------解决方案--------------------
lock (this)
{
    //执行操作
    DoSomething()....
    //比如操作静态变量,缓存等
}

防止并发操作,当前用户操作完,下个用户才能再进行操作

一般lock和一个静态型object变量进行配合

先声明一个 
private static object symObj = new object();
lock(symObj)
{
    //执行操作
    DoSomething()....
    //比如操作静态变量,缓存等
}


要是  int string 什么的 就不行了
------解决方案--------------------
lock 通常用于资源共享 同时 又要避免本线程使用资源时 资源被其他线程修改
撸主 怎么用lock玩起了线程同步了  
------解决方案--------------------
应该是把  lock  byte[]  也是编译通过的

------解决方案--------------------
引用: