我遇到线程问题,这是一个代码:
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次,所以这就是重点,我该如何解决这个问题?
答案 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
。