Anonim_999

mat

Nov 19th, 2022
766
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.89 KB | None | 0 0
  1. using System;
  2. using System.Threading;
  3.  
  4. namespace ConsoleApplication1
  5. {
  6.     class Program
  7.     {
  8.         public static int[] A;
  9.         public static int countThread = 1;
  10.         public static int subArrayLen;
  11.         public static double result = 0;
  12.         public static object Locker = new object();
  13.  
  14.         static void Main(string[] args)
  15.         {
  16.             int lenghtArray;
  17.             Console.WriteLine("Введите размерность массива: ");
  18.  
  19.             if (!int.TryParse(Console.ReadLine(), out lenghtArray) || lenghtArray <= 0)//Количество элементов в массиве
  20.             {
  21.                 Console.WriteLine("Не корректный ввод, размерность массива - 10");
  22.                 lenghtArray = 10;
  23.             }
  24.             A = new int[lenghtArray];
  25.             Console.WriteLine("Введите количество потоков: ");
  26.  
  27.             if (!int.TryParse(Console.ReadLine(),out countThread) || countThread <= 0)//количество потоков
  28.             {
  29.                 Console.WriteLine("Не корректный ввод, количество потоков - 1");
  30.                 countThread = 1;
  31.             }
  32.             if (countThread > lenghtArray)
  33.             {
  34.                 Console.WriteLine("Потоков больше чем количество элементов, количество потоков = количеству элементов");
  35.                 countThread = lenghtArray;
  36.             }
  37.  
  38.             subArrayLen = lenghtArray / countThread + 1;
  39.             Console.WriteLine($"Длина массива: {lenghtArray} | количество потоков: {countThread} | длина части: {subArrayLen}");
  40.             FillArray(ref A);
  41.             ShowArray(A);
  42.  
  43.             Thread[] threads = new Thread[countThread]; //Массив потоков
  44.  
  45.             for(int i = 0; i < countThread; i++)
  46.             {
  47.                 PartArray partArray = new PartArray
  48.                 {
  49.                     StartIndex = i * subArrayLen,
  50.                     EndIndex = (i + 1) * subArrayLen
  51.                 };
  52.  
  53.                 if (partArray.EndIndex > lenghtArray)
  54.                     partArray.EndIndex = lenghtArray;
  55.                 threads[i] = new Thread(() => GetModule(partArray));
  56.                 threads[i].Name = $"Поток №{i + 1}";
  57.                 threads[i].Start();
  58.             }
  59.  
  60.             foreach (Thread thread in threads)
  61.             {
  62.                 Console.WriteLine($"{thread.Name} - запущен");
  63.                 thread.Join();
  64.                 Console.WriteLine($"{thread.Name} - звершил");
  65.             }
  66.             result = Math.Sqrt(result);
  67.             Console.WriteLine($"Результат: {result}");
  68.         }
  69.  
  70.         private static void FillArray(ref int[] array)
  71.         {
  72.             Console.WriteLine("Убедитесь что вы вводите цифры, введете не цифры, элемент будет равен нулю");
  73.            
  74.             for (int i = 0; i < array.Length; i++)
  75.             {
  76.                 Console.Write($"элемент {i + 1}: ");
  77.                 int.TryParse(Console.ReadLine(),out array[i]);
  78.             }
  79.         }
  80.  
  81.         private static void ShowArray(int[] array)
  82.         {
  83.             foreach (int item in array)
  84.                 Console.Write($"{item} ");
  85.         }
  86.  
  87.         private static void GetModule(PartArray partArray)
  88.         {
  89.             int start = partArray.StartIndex;
  90.             int end = partArray.EndIndex;
  91.  
  92.             for (int i = start; i < end; i++)
  93.             {
  94.                 lock (Locker)
  95.                 {
  96.                     result += MathF.Pow(A[i],2);
  97.                 }
  98.             }
  99.         }
  100.     }
  101.  
  102.     class PartArray //
  103.     {
  104.         public int StartIndex;
  105.         public int EndIndex;
  106.     }
  107. }
Advertisement
Add Comment
Please, Sign In to add comment