首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

再问一下一个lock的有关问题

2013-10-19 
再问一下一个lock的问题。 public class TestClass{public int Column1 { set get }public int Column2 {

再问一下一个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[]  也是编译通过的

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

1.lockindex不是值类型,赋值的时候已经隐式转换成了object。
2.装箱说的是Monitor.Enter(int),不是lock。

热点排行