Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
2 / 2 / 2
Регистрация: 14.03.2017
Сообщений: 124
1

Создание потоков

10.05.2019, 21:31. Показов 482. Ответов 0

Author24 — интернет-сервис помощи студентам
1. Реализуйте последовательную обработку элементов векторов в соответствии с Вашим вариантом. Число элементов вектора задается параметром N.
2. Реализуйте многопоточную обработку элементов вектора, используя разделение вектора на равное число элементов. Число потоков задается параметром M.
3. Выполните анализ эффективности многопоточной обработки при разных параметрах N (10, 100, 1000, 100000) и M (2, 3, 4, 5, 10) Результаты представьте в табличной форме.
4. Выполните анализ эффективности при усложнении обработки каждого элемента вектора.


Определить максимальный элемент массива, среди элементов, расположенных на нечетных позициях


C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.Diagnostics;
 
namespace Laba4_2
{
    class Program
    {
        private static int[] arr;        
        private static Thread[] threads;
 
        private static void ShowArr(int n)
        {
            Console.Write("\nArray: ");
            for (int i = 0; i < n; i++)
                Console.Write($"{arr[i],3}");
            Console.WriteLine("\n");
        }
 
        private static void StartThread(int n, int m)
        {
            threads = new Thread[m];
            var range = (int)Math.Ceiling((double)n / m);
            for (int i = 0; i < m; i++)
            {
                int start = i * range,
                    end = start + range - 1;
                if (start > n - 1)
                    break;
                if (end > n - 1)
                    end = n - 1;
                threads[i] = new Thread(() => {
                    MaxNum(start, end);
                });
                threads[i].Name = "Thread " + Convert.ToString(i + 1);
                Console.WriteLine("\n{0} \nSearch range from {1} to {2} index", threads[i].Name, start, end);
                threads[i].Start();
                threads[i].Join();
            }
        }
 
        private static void MaxNum(int start, int end)
        {
            int max = arr[0];
            for (int i = start; i <= end; i += 2)
            {
                if (arr[i] > max) max = arr[i];
            }
            Console.WriteLine("\nMax element array among elements located at odd positions: {0}", max);            
        }
 
        static void MaxNum(int[] arr, int n)
        {
            int max = arr[0];
            for (int i = 0; i < n; i += 2)
                if (arr[i] > max) max = arr[i];
            Console.WriteLine("\nMax element array among elements located at odd positions: {0}", max);            
        }
 
        static void Main(string[] args)
        {
            Console.WriteLine("Enter number array element");
            int n = int.Parse(Console.ReadLine());
            Console.WriteLine("Enter number threads");
            int m = int.Parse(Console.ReadLine());
 
            Random random = new Random();
            arr = new int[n];
            for (int i = 0; i < n; i++)
            {
                arr[i] = random.Next(1, 21);
            }
            ShowArr(n);         
            Stopwatch sw1 = new Stopwatch();
            sw1.Start();
            MaxNum(arr, n);                      
            sw1.Stop();
            TimeSpan ts1 = sw1.Elapsed;
            Console.WriteLine("Total time: {0}", ts1.TotalMilliseconds);                              
 
            Thread.CurrentThread.Name = "Thread 1";
            Stopwatch sw2 = new Stopwatch();
            sw2.Start();
            Console.WriteLine("{0} main thread start work", Thread.CurrentThread.Name);            
            
            StartThread(n, m);          
            Console.WriteLine("Main thread {0} finish work.", Thread.CurrentThread.Name);
            sw2.Stop();
            TimeSpan ts2 = sw2.Elapsed;
            Console.WriteLine("Total time: {0}", ts2.TotalMilliseconds);
            Console.ReadKey();
        }
 
        
    }
}
Мой код не совсем точно работает, когда разделяю массив по частям на потоки то места нечетных и четных индексов путаются и получается не правильный результат. Помоги исправить пожалуйста
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.05.2019, 21:31
Ответы с готовыми решениями:

Создание потоков в цикле
Помогите пожалуйста разобраться в следующей ситуации: Создаю в цикле 10 потоков от 0 до 9 Вывожу...

Создание/удаление потоков
Добрый день. Есть массив в котором хранятся пути к папкам, необходимо чтобы работало столько же...

Создание массива потоков
Имеется массив потоков, но я не могу задать метод,который будет выполняться. Помогите,как это...

Создание потоков через пул
Здравствуйте, подскажите пожалуйста вот такое задание для создания потоков используйте пул вот...

0
10.05.2019, 21:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.05.2019, 21:31
Помогаю со студенческими работами здесь

Создание около 3000 потоков
Возможно ли создать 3000 потоков? Останется жив ПК?

Как организовать создание потоков?
Подскажите pls как правильно организовать создание потоков если заранее неизвестно сколько их...

Создание неопределенного количества потоков
Здравствуйте. Подскажите пожалуйста как: 1. Как создать неопределенное количество потоков? ...

Создание в background_worker пул потоков
Всем привет!!! столкнулся с проблемой не могу решить, вот допустим мы считываем все текстовые...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru