Пул потоками вывести номер столбца массива, в котором есть минимальный элемент текущей строки - 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; }
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.154 из 5
Похожие ответы