C#的多线程编程   
    
    我有一个过程如下:   
  public   class   myClass   
  { 
    public ArrayList a=new ArrayList();
    public ArrayList b=new ArrayList();
    public   void   Work()   
  {   
         for(int i=0,i<a.count,i++)
         {
           b.AddRange(……)
         }
  }   
  …………   
  }  
class Program
    {
        static void Main(string[] args)
        {
            Thread[] thread = new Thread[3];
            myClass[] mc=new myClass[3];
              for(int i=0,i<3,i++)
              {
               thread[i] = new Thread(new ThreadStart(mc[i].Work));
               thread[i].Start();
            }
        }
    }
我想定义了3个线程,线程1运行并得到结果b1,把线程1的b1赋值给线程2的a2,然后线程2运行并得到结果b2写入线程3的a3,线程3再运行得到结果b3。这3个线程同时执行过程中怎么把b的值传递呢,还有就是当Work里面循环结束我应该如何设置线程结束?

解决方案 »

  1.   

    用ManualResetEvent进行控制
    ManualResetEvent e1   第二个线程等待e1
    ManualResetEvent e2   第三个线程等待e2
    ManualResetEvent e3   主线程等待e3
      

  2.   

    我还是有点不清楚,是在myClass类里定义还是在main函数里啊,如果不是3个线程而是N个,那又怎么样使用ManualResetEvent?
      

  3.   

    你如果有n个线程,还要一个一个向下传递参数的话,就不需要使用多线程了。使用ManualResetEvent 是你明确的知道每个线程都要做什么,比如线程1在运行的时候,线程2也要计算一些数,然后等待线程1的结果继续执行。这种情况
      

  4.   

    LOCK?锁是无序的你怎么能知道那个线程先进入锁
      

  5.   

    LOCK是锁当前线程要写入b的时候使用啊
           for(int i=0,i <a.count,i++) 
            { 
              lock (b.SyncRoot)
              {
                b.AddRange(……) 
              }
            } 
    可以这么锁吧,但是我现在执行还是只能执行线程1,线程2、3的a都没有接收到上一线程的结果b,他们的值到底要如何传递?