object lockThis = new object ();这个不行,要放到全局,而且最好是static的

解决方案 »

  1.   

    放到全局或者改为静态
    总之就是互相需要排队的过程,要lock同一个对象
      

  2.   

    比如
    lock(a){过程1}
    lock(a){过程2}
    lock(b){过程3}
    lock(b){过程4}
    过程1和2不能多线程同时执行,需要排队
    过程3和4不能同时执行
    前提是a和b需要是全局变量或静态变量,否则每进入方法都实例化一次,虽然名字相同,但是其实不是一个东西
      

  3.   

    lock第一点就是要保证你这个东西多个线程之间都可以识别,你这样在方法内写这样有啥用,只有每个线程才认识这个object
    就跟楼上说的,你这个得放到全局变量里面,至于是否需要static,或者说是否可以static,看你实际设计,我就设计过只能绝对不能static的,因为设计中这个类虽然不是单例,但它是被其它单例类包含的,所以只能非static的object
      

  4.   

    object lockThis = new object ();
    就算这个该为全局的也不行吧!如果 线程1调用Function(1,2)到如下部份  
      lock (lockThis)
        {
            c=a+b;
        } 
    但如果此时线程2调用Function(2,3);会不会此时已经更改a和b的值 使线程1 返回c=2+3 而不是 c=1+2呢?
      

  5.   


    object lockThis = new object ();该为全局
    如果 线程1调用Function(1,2)到如下部份  
      lock (lockThis)
        {
            c=a+b;
        } 
    但如果此时线程2调用Function(2,3);会不会此时已经更改a和b的值 使线程1 返回c=2+3 而不是 c=1+2呢?
    你怎么看
      

  6.   

    当然不会。public int  Function(int a,int b)
    a和b是参数,每次调用时传值进来,两次调用function是不会相互影响的。
    你的例子里应该都不需要lock呀。
    public int  Function(int a,int b)
    {
        int c;
        c=a+b;
        return c;
    }
    应该是不会报错的。
      

  7.   

    你的例子里没有任何需要lock的地方
    1.首先a和b是参数传递进来的,并不是直接使用a和b的地址
    2.对a和b只有取值,没有赋值
    3.变量c是个局部变量,两个线程同时执行,并不是同一个c
      

  8.   

    object lockThis = new object ();
    就算这个该为全局的也不行吧!如果 线程1调用Function(1,2)到如下部份  
      lock (lockThis)
        {
            c=a+b;
        } 
    但如果此时线程2调用Function(2,3);会不会此时已经更改a和b的值 使线程1 返回c=2+3 而不是 c=1+2呢?

    线程1调用Function 时int 一个c 线程2 调用Function时又int 一个c所以线程1和2是不影响的
      

  9.   

    除非线程处理模块有公用的资源,这样才能够使用lock,对公用资源进行锁定,一个线程用完了,另外一个线程接着用锁定资源可以直接初始化一个object对象,需要全局的,然后线程内部锁定这个对象,开始干活,干完活,释放这个对象,等着下一个线程锁定。。
      

  10.   

     lock (lockThis)
        {
            c=Funtion();//如果Funtion()是外部函数就要lock对不对?
        } 
      

  11.   

    你这样每一个 function的类都有一个 类对象,每一个类对象里面都有一个lockThis,岂不是失去作用了
      

  12.   

     lock (lockThis)
        {
            c=Funtion();//如果Funtion()是外部函数就要lock对不对?
        } 
    我觉得你还是从计算机基础开始学起吧
    这跟函数放哪里有任何关系?
      

  13.   

     lock (lockThis)
        {
            c=Funtion();//如果Funtion()是外部函数就要lock对不对?
        } 锁不锁是看需求的,只有当多线程会有冲突才需要诶; static   int c;
     static readonly object  lockThis  =new object();
    public void Function(int a,int b)
    {
        lock (lockThis)
        {
            c=a+b; // 多线程对一个全局变量做写入操作,此时才会有冲突可能诶
        } 
    }
      

  14.   

    一句话,当多个线程需要同时访问一个对象的时候会出错,这时候就需要排队,然后就是LOCK