Многопоточная обработка двумерного массива! - C#
Формулировка задачи:
Это многопоточная обработка одномерного массива. Помогите исправить из одномерного массива в двумерный, буду очень признателен.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace MyProgram
{
class Program
{
static void Main(string[] args)
{
Random rnd = new Random();
Vector v = new Vector(100, 6, rnd);
v.Start();
Console.ReadKey();
}
}
class Vector
{
int[] array;
int threadCount;
public Vector(int size, int threadCount, Random rnd)
{
array = new int[size];
for (int i = 0; i < size; i++)
{
array[i] = rnd.Next(100);
}
this.threadCount = threadCount;
}
void Run(object i)
{
int k = array.Length / threadCount;
for (int j = (int)i * k; j < ((int)i + 1) * k; j++)
{
array[j] = (int)Math.Pow(array[j], 3);
Console.WriteLine("Поток {0}", (int)i + 1);
}
}
public void Start()
{
Thread[] t = new Thread[threadCount];
for (int i = 0; i < threadCount; i++)
{
DateTime dt1, dt2;
dt1 = DateTime.Now;
dt2 = DateTime.Now;
TimeSpan ts = dt2 - dt1;
t[i] = new Thread(new ParameterizedThreadStart(Run));
t[i].Start(i);
t[i].Join(i);
Console.WriteLine("Основной поток: Завершение рабочего потока.");
Console.WriteLine("Время выполнение: {0}", ts.TotalMilliseconds);
}
}
}
}Решение задачи: «Многопоточная обработка двумерного массива!»
textual
Листинг программы
class Vector
{
int[,] array;
int threadCount;
public Vector(int size, int threadCount, Random rnd)
{
array = new int[size, size];
for (int i = 0; i < size; i++)
for (int j = 0; j < size; j++)
array[i, j] = rnd.Next(100);
this.threadCount = threadCount;
}
void Run(object i)
{
int k = array.GetLength(0) / threadCount;
for (int m = 0; m < array.GetLength(0); m++)
{
for (int j = (int)i * k; j < ((int)i + 1) * k; j++)
{
array[m, j] = (int)Math.Pow(array[m, j], 3);
Console.WriteLine("Поток {0}", (int)i + 1);
}
}
}
public void Start()
{
Thread[] t = new Thread[threadCount];
for (int i = 0; i < threadCount; i++)
{
DateTime dt1, dt2;
dt1 = DateTime.Now;
dt2 = DateTime.Now;
TimeSpan ts = dt2 - dt1;
t[i] = new Thread(new ParameterizedThreadStart(Run));
t[i].Start(i);
t[i].Join(i);
Console.WriteLine("Основной поток: Завершение рабочего потока.");
Console.WriteLine("Время выполнение: {0}", ts.TotalMilliseconds);
}
}
}