两个线程在c#中没有正确使用相同的功能

时间:2012-09-09 07:18:11

标签: c# multithreading

我遇到线程问题,这是一个代码:

class myThread
{
    public int _start, _finish;
    string[] new_array = new string[10];
    public static string[] existed_array = new string[20];    
    public myThread(string name, int start, int finish)
    {
        _start = start;
        _finish = finish;
        Thread thread = new Thread(this.Get);
        thread.Name = name;
        thread.Start();//передача параметра в поток
     }

    void Get()
    {
        for (int ii = _start; ii < _finish; ii++)
        {
           // i put data in existed array in Main()
           // new array is just an array where i want to put existed data
           new_array[ii] = existed_array[ii];
           // but in output new_array[0]=null; new_array[1]=value
        }
    }
}

void Main ()
{
    // For example
    myThread.existed_array = {1, 2 , 3, ...}

    myThread t1 = new myThread("Thread 1", 0, 1);
    myThread t2 = new myThread("Thread 2", 1, 2);
}

线程使用不同的参数运行Get(),但在输出中只有第二个线程的参数。 正如我从逐步程序中看到的那样,在Get函数中每行运行2次,所以这就是重点,我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

如果我理解正确,你的代码就会按照预期运行。

在你的评论中,你声称“但在输出中new_array [0] = null; new_array [0] = value”。我对此的解释是,在你的第二个帖子new_array[0] = null和第一个帖子new_array[0] = <some value>中。

根据您的代码,new_array是一个非静态变量,这意味着它不会跨线程共享。

考虑到你提供给第二个线程的参数,它从不接触数组中的第0个。您已将起始值设置为1,因此ii从1开始。这意味着您从未将new_array[0]设置为任何内容,因此默认为null