线程有生产者消费者两个·
共享区里的数据的一个属性是引用类型的 
这消费者提取共享取数据的时候 应用类型的值已经变成下一个值了
                                            
就是  
List<Class1> CL=new List<Class1>();
处理Cl;
a.ChildLIst=Cl;
然后将a传入共享取,共享区有lock的
消费者线程用a.ChildList的时候就直接是第下一个个数据了;
有人懂吗?
我在线等!多线程引用值类型共享

解决方案 »

  1.   


    怎么了,这有什么可奇怪的?难道你两个过程分别访问a.ChildList的时候,第二个方法不是读取“下一个个数据”吗?这有什么问题吗?
      

  2.   


    就是 缓存区有是个个数为3的数组。a.ChildLIst=CL之后,把a给缓存区,然后CL又为下一个数据做准备,这个时候刚放进去的数值会变。有写lock'的呀
      

  3.   

    "就是 缓存区有是个个数为3的数组。a.ChildLIst=CL之后,把a给缓存区,然后CL又为下一个数据做准备,这个时候刚放进去的数值会变。有写lock'的呀 "
    把详细的代码给出来,不然真的不清楚你在说什么。
      

  4.   


    就是 缓存区有是个个数为3的数组。a.ChildLIst=CL之后,把a给缓存区,然后CL又为下一个数据做准备,这个时候刚放进去的数值会变。有写lock'的呀
    每次数据新建一个CL
      

  5.   

    list<Class1> CL=new list<Class1>();
    Class1[10] C1=new C1[10];
    While()
    {
    ...准备生成新的a
    if(...)
    {
    Cl.add(C1[i]);
    }
    if(...)
    {
    a.ChildList=CL;
    shared.setbuffer(a);
    }
    ...准备生成新的a
    }
    代码太长了,大概是这个意思,以前不是多线程的,在setBuffer这里直接计算就好了,现在这里传入之后,有变化。而且list CL和数组C1是起对照作用,不能每次都建立一个啊,我是希望传入共享区之后就不变啊。
    共享区就是setBuffer和getBuffer的时候有写lock的(缓存区满的时候和空的时候)
      

  6.   

    要说清楚,你LOCK住的是什么?变化的是什么?
    现在你代码又给不全,只能靠猜,
    如果你LOCK的是a,而ChildList,CL有变化,那不是很正常啊
      

  7.   

    参考:http://bbs.csdn.net/topics/390144084到底是加锁(只让一个线程执行其它的都阻塞)还是对控制变量(包括List和Array)预先复制,需要综合平衡考虑。或者你可以换着试一试,然后看看哪一个方法让程序整体更快、用户操作体验更平滑。