Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Threading;
- namespace ConsoleApplication1
- {
- class Program
- {
- public static int[] A;
- public static int countThread = 1;
- public static int subArrayLen;
- public static double result = 0;
- public static object Locker = new object();
- static void Main(string[] args)
- {
- int lenghtArray;
- Console.WriteLine("Введите размерность массива: ");
- if (!int.TryParse(Console.ReadLine(), out lenghtArray) || lenghtArray <= 0)//Количество элементов в массиве
- {
- Console.WriteLine("Не корректный ввод, размерность массива - 10");
- lenghtArray = 10;
- }
- A = new int[lenghtArray];
- Console.WriteLine("Введите количество потоков: ");
- if (!int.TryParse(Console.ReadLine(),out countThread) || countThread <= 0)//количество потоков
- {
- Console.WriteLine("Не корректный ввод, количество потоков - 1");
- countThread = 1;
- }
- if (countThread > lenghtArray)
- {
- Console.WriteLine("Потоков больше чем количество элементов, количество потоков = количеству элементов");
- countThread = lenghtArray;
- }
- subArrayLen = lenghtArray / countThread + 1;
- Console.WriteLine($"Длина массива: {lenghtArray} | количество потоков: {countThread} | длина части: {subArrayLen}");
- FillArray(ref A);
- ShowArray(A);
- Thread[] threads = new Thread[countThread]; //Массив потоков
- for(int i = 0; i < countThread; i++)
- {
- PartArray partArray = new PartArray
- {
- StartIndex = i * subArrayLen,
- EndIndex = (i + 1) * subArrayLen
- };
- if (partArray.EndIndex > lenghtArray)
- partArray.EndIndex = lenghtArray;
- threads[i] = new Thread(() => GetModule(partArray));
- threads[i].Name = $"Поток №{i + 1}";
- threads[i].Start();
- }
- foreach (Thread thread in threads)
- {
- Console.WriteLine($"{thread.Name} - запущен");
- thread.Join();
- Console.WriteLine($"{thread.Name} - звершил");
- }
- result = Math.Sqrt(result);
- Console.WriteLine($"Результат: {result}");
- }
- private static void FillArray(ref int[] array)
- {
- Console.WriteLine("Убедитесь что вы вводите цифры, введете не цифры, элемент будет равен нулю");
- for (int i = 0; i < array.Length; i++)
- {
- Console.Write($"элемент {i + 1}: ");
- int.TryParse(Console.ReadLine(),out array[i]);
- }
- }
- private static void ShowArray(int[] array)
- {
- foreach (int item in array)
- Console.Write($"{item} ");
- }
- private static void GetModule(PartArray partArray)
- {
- int start = partArray.StartIndex;
- int end = partArray.EndIndex;
- for (int i = start; i < end; i++)
- {
- lock (Locker)
- {
- result += MathF.Pow(A[i],2);
- }
- }
- }
- }
- class PartArray //
- {
- public int StartIndex;
- public int EndIndex;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment