楽しみのために、マンデルブロー プログラムを作成しました。現在、画像を左右の 2 つの部分に分割して 2 つのスレッドで処理することにより、マルチスレッド化を試みています。ただし、アプリケーションは起動するとすぐにクラッシュし (コンソール出力に基づくと、クラッシュ後も最初のスレッドは続行されますが、2 番目のスレッドは開始されません)、どうすればよいかわかりません。
クラッシュは次の行で発生しthis.output[x][y] = this.calculate_pixel_rgb(x, y);
、オブジェクト参照が見つからないというメッセージが表示されます。これは最初のスレッドで機能するため、理解できません。
public void compute_all()
{
this.setcolors(); this.zoom_multiplier = (4 / this.zoom / this.resolution);
Thread thread1 = new Thread(new ParameterizedThreadStart(computation_thread)); thread1.Start(new double[] { 0, 0.5 });
Thread thread2 = new Thread(new ParameterizedThreadStart(computation_thread)); thread2.Start(new double[] { 0.5, 1 });
thread1.Join(); thread2.Join();
}
public void computation_thread(object threadinfo)
{
double[] parameters = (double[])threadinfo;
this.output = new int[this.resolution][][];
for (int x = (int)(this.resolution * parameters[0]); x < (int)(this.resolution * parameters[1]); x++)
{
this.output[x] = new int[this.resolution][];
for (int y = 0; y < this.resolution; y++)
{
this.output[x][y] = this.calculate_pixel_rgb(x, y);
this.pixels_completed++;
}
}
}