0 / 0 / 0
Регистрация: 05.09.2016
Сообщений: 47
|
|
1 | |
Алгоритм для многопоточности06.09.2016, 12:49. Показов 2523. Ответов 63
Метки нет (Все метки)
Мне нужно написать алгоритм реализации задач(как я думаю делать):
Написать консольную программу, которая выполняет поиск максимального элемента в массиве с 1000000000 элементов. Массив в начале программу можно инициализировать произвольным образом. Программа должна продемонстрировать следующие подходы к решению данной проблемы. - Поиск использует только 1 поток. - Поиск использует 2 потока. - Поиск использует оптимальное количество потоков, которые можно запускать на данном компьютере. - Программа выполняет поиск используя 20 потоков. Подскажите реализацию алгоритма Добавлено через 2 часа 40 минут я как думаю делать: можно поделить 1000000000 елементов на количество потоков и искать в каждом потоке макс а потом сравнить их,то есть если потоков 20 то поделить на 20 частей и потом сравнить эти 20 элементов . Хотя как по мне лучше отсортировать массив и взять последний элемент
0
|
06.09.2016, 12:49 | |
Ответы с готовыми решениями:
63
Соотношение многопоточности приложения c++ и многопоточности на уровне системы? Написать алгоритм рекурсивного перебора папок в многопоточности с использованием Fork/Join Framework Наилучшее решение для реализации многопоточности Помогите алгоритм для char переделать в алгоритм для float |
12 / 9 / 1
Регистрация: 08.08.2016
Сообщений: 45
|
|
14.09.2016, 16:08 | 41 |
0
|
0 / 0 / 0
Регистрация: 05.09.2016
Сообщений: 47
|
||||||
14.09.2016, 16:18 [ТС] | 42 | |||||
Юрий Петренко, ок
main
0
|
12 / 9 / 1
Регистрация: 08.08.2016
Сообщений: 45
|
|
14.09.2016, 16:36 | 43 |
Есть несколько ошибок, в итоге могу сказать тебе что поток ты пока не запустил.
Можешь ответить почему ты думаешь что запустил поток? Какая строка должна была по твоему это сделать? Добавлено через 2 минуты Пардон не заметил комменты. Да там неправильно. Добавлено через 4 минуты эта строка просто не нужна. суть ты уловил правильно, но вот здесь и есть основная проблема. Потом обсудим эту строку (переделаем). сначала нужно понять, как же запускается поток. А для этого нужно разобраться с этим вопросом:
0
|
0 / 0 / 0
Регистрация: 05.09.2016
Сообщений: 47
|
|
14.09.2016, 16:37 [ТС] | 44 |
Юрий Петренко,
я думаю так thread.start();
0
|
12 / 9 / 1
Регистрация: 08.08.2016
Сообщений: 45
|
|
14.09.2016, 17:00 | 45 |
Поток запускается так:
thread.start(); Добавлено через 3 минуты про event loop - знаешь?
0
|
0 / 0 / 0
Регистрация: 05.09.2016
Сообщений: 47
|
|
14.09.2016, 17:05 [ТС] | 46 |
Юрий Петренко, нет
0
|
12 / 9 / 1
Регистрация: 08.08.2016
Сообщений: 45
|
|
14.09.2016, 17:56 | 47 |
Вобщем у каждого потока есть цикл событий (event loop)
Цикл событий - просто бесконечно выполняющийся цикл, в котором поток ждет сигнал о завершении своей работы. Так же он накапливает события на которые подписаны принадлежащие ему объекты. После того как ты сделаешь QThread::start() поток запустится. Вызовется функция QThread::run(); которая вызовет QThread::exec(), которая запустит тот самый eventloop. Так же сгенерируется событие started() (то на которое мы подписались (там где connect....)). После того как поток запущен, у него формируется очередь событий и сигнал будет ждать в eventLoop того QThread в которы был размещен получатель. Мы приконнектили слот getMax , к сигналу о запуске потока started(). Поток стартанул, сгенерировал сигнал started(), слоты подписанные на него стали исполняться. Понятно?
0
|
0 / 0 / 0
Регистрация: 05.09.2016
Сообщений: 47
|
|
14.09.2016, 17:57 [ТС] | 48 |
Юрий Петренко, да, но мы еще не приконектили, нужно конект изменить
0
|
12 / 9 / 1
Регистрация: 08.08.2016
Сообщений: 45
|
|
14.09.2016, 18:15 | 49 |
Правильно. Для этого нам нужно что бы сигнатура слота и сигнала совпали.
Значит 1)либо нам нужен другой сигнал, который передаст эти три параметра в слот. 2)либо нам нужно эти параметры слота сделать полями класса, и передавать их при инициализации через конструктор. И переделать getMax(); что бы нужные ему параметры он брал из объекта.
0
|
0 / 0 / 0
Регистрация: 05.09.2016
Сообщений: 47
|
|
14.09.2016, 18:18 [ТС] | 50 |
Юрий Петренко, я что проще сделать?
я думаю 2 вариант можна сделать. но как не знаю это сделать)
0
|
12 / 9 / 1
Регистрация: 08.08.2016
Сообщений: 45
|
|
14.09.2016, 18:31 | 51 |
Да ты же уже это делал.
0
|
0 / 0 / 0
Регистрация: 05.09.2016
Сообщений: 47
|
|
14.09.2016, 19:03 [ТС] | 52 |
Юрий Петренко, честно, я незнаю как сделать, может и знаю но думаю что незнаю)
Добавлено через 26 минут Юрий Петренко, а когда я такое делал?
0
|
12 / 9 / 1
Регистрация: 08.08.2016
Сообщений: 45
|
|
14.09.2016, 19:11 | 53 |
Посмотри 14 сообщение в этой теме, там ты передаешь в конструктор параметр.
0
|
0 / 0 / 0
Регистрация: 05.09.2016
Сообщений: 47
|
|
14.09.2016, 19:15 [ТС] | 54 |
Юрий Петренко, Я знаю как передавать, а от какие передавать я незнаю
0
|
12 / 9 / 1
Регистрация: 08.08.2016
Сообщений: 45
|
|
14.09.2016, 19:26 | 55 |
а ну так те которые передаешь в слот getMax, т.е. создай в Worker три поля: int* -указатель на массив, int - начало отрезка в котором ищешь и itn -конец. И передавай их в конструкторе. И пусть getMax пользуется этими полями, а не локальными переменными. Т.е. раньше слот был getMax(int*, int, int) , должен стать getMax().
0
|
3 / 3 / 0
Регистрация: 30.07.2014
Сообщений: 12
|
||||||||||||||||
14.09.2016, 22:33 | 56 | |||||||||||||||
stasJun, можно сделать так(не используя конекты):
1
|
0 / 0 / 0
Регистрация: 05.09.2016
Сообщений: 47
|
|
15.09.2016, 13:56 [ТС] | 57 |
Юрий Петренко, pashkevych, а с 2 потоками как делать?
0
|
12 / 9 / 1
Регистрация: 08.08.2016
Сообщений: 45
|
||||||
15.09.2016, 17:49 | 58 | |||||
0
|
0 / 0 / 0
Регистрация: 05.09.2016
Сообщений: 47
|
|||||||||||
15.09.2016, 19:46 [ТС] | 59 | ||||||||||
Юрий Петренко, спасибо
что вы имеете введупод : //здесь получить с консоли число потоков N - я думал сколько потоков создам , столько и будет //разделить массив на N кусков - а как это сделать? создал масив:
Ось мои наброски , как я думаю делать
0
|
3 / 3 / 0
Регистрация: 30.07.2014
Сообщений: 12
|
|||||||||||
15.09.2016, 21:45 | 60 | ||||||||||
stasJun, на вскидку написал код:
1
|
15.09.2016, 21:45 | |
15.09.2016, 21:45 | |
Помогаю со студенческими работами здесь
60
Построить алгоритм ДО и алгоритм ПОКА для вычислений значения функции на отрезке [a,b] с шагом h. Составить алгоритм-вычисление квадрата суммы двух чисел и алгоритм для вычисления функции Кто может составить алгоритм по проге? Алгоритм нужен для отчета если вам это интересно) по многопоточности Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |