Пул потоками вывести номер столбца массива, в котором есть минимальный элемент текущей строки - C#
Формулировка задачи:
Мне нужно пул потоками вивести номер столпца массива в котором есть минимальный елемент текущей строки. Програма сделана по шаблону даному учителем. (Извените зо ошибки)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace lab_2 { class Program { static int numOfCol = 0; static int j, i = 0; static int min = 0; static int number = 10; static int[,] mas = new int[number, number]; static Random rnd = new Random(); public class EntryPoint { public static void TimerProc(object state) { } } public static void Main() { int workerThreads; int portThreads; for (i = 0; i < number; i++) { for (j = 0; j < number; j++) { mas[i, j] = rnd.Next(1, 100); } } Console.WriteLine("processor=" + Environment.ProcessorCount); ThreadPool.GetMaxThreads(out workerThreads, out portThreads); Console.WriteLine("\nMaximum worker threads: \t{0}" + "\nMaximum completion port threads: {1}", workerThreads, portThreads); //Определить нужное максимальное количество потоков //Пусть будет по 4 на каждий процесор // int MaxtTreadsCount = Environment.ProcessorCount * 4; int MaxThreadsCount = 20; //Установим мвксимальное количество робочих потоков ThreadPool.SetMaxThreads(MaxThreadsCount, MaxThreadsCount); // Устаовим минимальное количество робочих потоков ThreadPool.SetMinThreads(2, 2); for (i = 0; i < number; i++) { for (j = 0; j < number; j++) { Console.WriteLine("i=" + i + " j=" + j + " mas=" + mas[i, j]); } } Console.WriteLine("start time=" + DateTime.Now.Millisecond); for (i = 0; i < number; i++) { min = mas[i, 0]; for (j = 0; j < number; j++) { ThreadPool.QueueUserWorkItem(Function, mas[i, j]); //if (j == (number - 1)) { Console.WriteLine("Row" + i + "Min is in: " + numOfCol); } } Console.WriteLine("Row-" + i + "Min is in: " + numOfCol); numOfCol = 0; } ThreadPool.GetMaxThreads(out workerThreads, out portThreads); Console.WriteLine("\nmaximum worker threads: /t{0}" + "\nmaximum completion port threads: {1}", workerThreads, portThreads); Console.WriteLine("end time=" + DateTime.Now.Millisecond); Console.ReadLine(); } public static void Function(object instance) { Console.WriteLine(DateTime.Now.Millisecond + " Hello of thread {0}! ", Thread.CurrentThread.GetHashCode()); int z = (int)instance; if (z < min) { min = z; numOfCol = j; } Thread.Sleep(1000); } } }
Решение задачи: «Пул потоками вывести номер столбца массива, в котором есть минимальный элемент текущей строки»
textual
Листинг программы
using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Threading; namespace ConsoleApplication1 { class Programm { public static int N = 10; public static int LimitNumberRandom=100; public static void Main() { var indexRow = 0; var rnd = new Random(); var elements = new List<int>(new int[N]); var massiv = new List<DataElement>(); elements.ForEach(elementList => { var dataElement = new DataElement(++indexRow); elements.ForEach(element => dataElement.Elements.Add(rnd.Next(LimitNumberRandom)-rnd.Next(LimitNumberRandom))); massiv.Add(dataElement); }); Console.WriteLine("Massive"); massiv.ForEach(listElement => { listElement.Elements.ForEach(element => Console.Write("{0,4} ", element)); Console.WriteLine(); }); Console.WriteLine(); massiv.AsParallel().ForAll(listElement => { var watch = new Stopwatch(); watch.Start(); var elementIndex = 1; var minIndex = elementIndex; var min = listElement.Elements[0]; listElement.Elements.ForEach(element => { if (min > element) { min = element; minIndex = elementIndex; } elementIndex++; }); watch.Stop(); Console.WriteLine("{0} ticks: Hello of thread {1}! Min[{2},{3}] = {4}", watch.ElapsedTicks, Thread.CurrentThread.ManagedThreadId, listElement.IndexRow, minIndex, min); }); Console.ReadLine(); } private class DataElement { public DataElement(int indexRow) { IndexRow = indexRow; Elements = new List<int>(); } public int IndexRow { get; set; } public List<int> Elements { get; set; } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д