Осуществить распараллеливание алгоритма, реализующего нахождение минимального элемента одномерного массива - C#
Формулировка задачи:
Help help help
есть задание "Нахождение вектора минимальных элементов строк матрицы." и вот код
используется распараллеливание
а нужно переделать для одномерного массива
как это сделать?
using System;
using System.Collections.Generic;
namespace FindMin
{
class Program
{
delegate int del(int[] row);
static void Main()
{
Random rand = new Random(DateTime.Now.Millisecond);
const int ROWS_NUMBER = 10;
const int COLS_NUMBER = 10;
int[,] matrix = new int[ROWS_NUMBER, COLS_NUMBER];
for (int i = 0; i < ROWS_NUMBER; i++)
{
for (int j = 0; j < COLS_NUMBER; j++)
{
matrix[i, j] = rand.Next(0, 100);
}
}
Console.WriteLine("Matrix:\n");
for (int i = 0; i < ROWS_NUMBER; i++)
{
for (int j = 0; j < COLS_NUMBER; j++)
{
Console.Write("{0,3} ", matrix[i, j]);
}
Console.WriteLine();
}
int[] minVector = FindMinVector(matrix);
Console.WriteLine("Vector of min elements:\n");
for (int i = 0; i < ROWS_NUMBER; i++)
{
Console.Write("{0,3} ", minVector[i]);
Console.WriteLine();
}
del asyncDelegate = FindMinElement;
List<IAsyncResult> results = new List<IAsyncResult>();
for (int i = 0; i < ROWS_NUMBER; i++)
{
results.Add(asyncDelegate.BeginInvoke(GetMatrixRow(matrix, i), null, null));
if (i == 0)
{
Console.WriteLine("\nMain thread continues its work");
}
}
for (int i = 0; i < 10; i++)
{
minVector[i] = asyncDelegate.EndInvoke(results[i]);
}
Console.WriteLine("\nVector of min elements with delegates:\n");
for (int i = 0; i < ROWS_NUMBER; i++)
{
Console.Write("{0,3} ", minVector[i]);
Console.WriteLine();
}
Console.ReadLine();
}
public static int[] FindMinVector(int[,] matrix)
{
int[] vector = new int[matrix.GetUpperBound(0)+1];
for (int i = 0; i < vector.Length; i++)
{
vector[i] = FindMinElement(GetMatrixRow(matrix, i));
}
return vector;
}
public static int[] GetMatrixRow(int[,] matrix, int rowNumber)
{
if (rowNumber > matrix.GetUpperBound(0)+1)
{
return null;
}
int[] row = new int[matrix.GetUpperBound(0)+1];
for (int i = 0; i < row.Length; i++)
{
row[i] = matrix[rowNumber, i];
}
return row;
}
public static int FindMinElement(int[] row)
{
int min = Int32.MaxValue;
for (int i = 0; i < row.Length; i++)
{
if (row[i] < min)
{
min = row[i];
}
}
return min;
}
}
}Решение задачи: «Осуществить распараллеливание алгоритма, реализующего нахождение минимального элемента одномерного массива»
textual
Листинг программы
Thread t1 = new Thread(delegate() { min(50, mas); });