Пул потоками вывести номер столбца массива, в котором есть минимальный элемент текущей строки - 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; }
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д