|
20 / 19 / 1
Регистрация: 13.08.2012
Сообщений: 779
|
|
Многопоточность при сортировке массивов13.04.2014, 22:11. Показов 8437. Ответов 84
Метки нет (Все метки)
Уважаемые, столкнулся с ситуацией, имею 3 массива, содержимое которых одинаково (координаты точек в 3д пространстве), произвожу сортировку каждого массива по определенному измерению (x, y, z), хотел спросить, можно ли как-то ускорить процесс, возникла идея многопоточности (т.е. одновременно выполнять сортировку 3-х массивов), но я не уверен что я корректно мыслю т.к. не разу не сталкивался с многопоточностью, подскажите как правильно ?
0
|
|
| 13.04.2014, 22:11 | |
|
Ответы с готовыми решениями:
84
Не могу найти ошибку при сортировке массивов Почему программа падает при сортировке массивов больших размерностей Задача по сортировке массивов |
|
Заблокирован
|
|
| 13.04.2014, 22:22 | |
|
да конечно лучше делать в трёх потоках, для такой примитивной цели можешь не гемороиться с ручным созданием потоков, советую использовать Intel TBB и его parallel_for и на будущее, поставь себе Intel Parallel Studio - много чего узнаешь вдобавок ...
Добавлено через 1 минуту выкладывай свой код - распарралелю
0
|
|
|
20 / 19 / 1
Регистрация: 13.08.2012
Сообщений: 779
|
||||||
| 13.04.2014, 22:35 [ТС] | ||||||
|
ну вот допустим:
0
|
||||||
|
Заблокирован
|
||||||
| 13.04.2014, 23:03 | ||||||
|
ну вот смотри, надеюсь разберёшся.... TBB не использовал, предполагая что ты не догадаешься, как его подключить
![]()
1
|
||||||
|
20 / 19 / 1
Регистрация: 13.08.2012
Сообщений: 779
|
|
| 13.04.2014, 23:28 [ТС] | |
|
так полагаю функция CreateThread создает поток ? а как его потом освобождать или тут это не требуется ? или это вообще псевдокод ?)
0
|
|
|
Заблокирован
|
|||||||||
| 13.04.2014, 23:32 | |||||||||
1
|
|||||||||
|
20 / 19 / 1
Регистрация: 13.08.2012
Сообщений: 779
|
|
| 14.04.2014, 00:46 [ТС] | |
|
newbie666, хм.. можете пояснить как вообще происходит выполнение программы, я немного не понимаю, создается поток и сразу вызывается функция с соответствующими данными, при этом программа продолжает работать дальше и как только функция выполнится данные обновтяся или как?
1
|
|
|
Заблокирован
|
|
| 14.04.2014, 00:56 | |
|
честно говоря я сам тут немного накосячил, здесь процесс раньше завершится, чем отработают потоки скорее всего, так что в данном примитивном примере перед return 0; в мэйне надо поставить какую то паузу или std::cin или гет чар
![]() Я не понял вопроса, ты конкретно спроси. Если что - функция main - это так сказать Entry Point процесса, которая соответственно создаёт главный поток, в котором и выполняется, в данном примере создаётся дополнительно три потока (в цикле), в каждый из которого передаётся элемент массива. Для каждого потока будет вызван код поточной функции, в котором будет произведена сортировка. Если же ты хочешь сделать какие - то операции над общими данными несколькими потоками - нужно учесть синхронизацию потоков, в Windows лучше делать через EnterCriticalSection, в Linux - мьютексами
0
|
|
|
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
||||||
| 14.04.2014, 03:03 | ||||||
|
Если компилятор поддерживает С++11:
1
|
||||||
|
20 / 19 / 1
Регистрация: 13.08.2012
Сообщений: 779
|
|
| 14.04.2014, 08:41 [ТС] | |
|
newbie666, вопрос заключается в том когда я получу отсортированный массив ?) если работать без потоков то программа ведь пошагово выполняется, т.е. сначала сортируется 1-ый массив, после него второй и так далее, а тут я как понимаю параллельно все происходит ?
Добавлено через 17 минут alsav22, странно у меня говорит что thread не является членом std, это говорит о том что у меня компилятор не поддерживает С++11 ?
0
|
|
|
Заблокирован
|
||||||||
| 14.04.2014, 08:48 | ||||||||
1
|
||||||||
|
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
| 14.04.2014, 10:44 | |
|
0
|
|
|
20 / 19 / 1
Регистрация: 13.08.2012
Сообщений: 779
|
|
| 14.04.2014, 12:29 [ТС] | |
|
alsav22, заинклюдил, Microsoft Visual Studio 2012, всеравно ругается.
0
|
|
|
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
||
| 14.04.2014, 12:47 | ||
|
Т.е., на #include <thread> не ругается, а на std::thread ругается? Код какой пробуете? Чисто мой? Сейчас проверю на 13-й студии.
0
|
||
|
Заблокирован
|
|
| 14.04.2014, 12:53 | |
|
да гонит он, у меня VS2012 - всё работает...
0
|
|
|
20 / 19 / 1
Регистрация: 13.08.2012
Сообщений: 779
|
|
| 14.04.2014, 13:13 [ТС] | |
|
извиняюсь, перезапустил студию, перестало выпендриваться, иногда бывает что чушь начинает нести) а если использовать thread класс, то как тут ? можете пояснить, как отловить событие о том что массив отсортировался ?
0
|
|
| 14.04.2014, 13:20 | |
|
0
|
|
|
20 / 19 / 1
Регистрация: 13.08.2012
Сообщений: 779
|
||||||
| 14.04.2014, 13:23 [ТС] | ||||||
|
хм.. теперь вроде все работает, спасибо большое всем
![]() Добавлено через 1 минуту newbie666, нет, но я не совсем понимаю, при отслеживании события "завершения сортировки", нам нужны дескрипторы потоков ?
0
|
||||||
|
Заблокирован
|
|||||||||||||
| 14.04.2014, 13:27 | |||||||||||||
Дальше мы ждём, пока все 3 события просигналят (а не хотя бы одно из них)
как только все три события просигналять - программа поедет дальше.... А в сигнальное состояние каждое событие каждого потока устанавливается тут:
2
|
|||||||||||||
|
20 / 19 / 1
Регистрация: 13.08.2012
Сообщений: 779
|
|
| 14.04.2014, 15:31 [ТС] | |
|
хм.. а метод join() что-то типа "уничтожает" поток ?
0
|
|
| 14.04.2014, 15:31 | |
|
Помогаю со студенческими работами здесь
20
Обработка массивов и многопоточность Многопоточность: вывести на экран символ, который встречается наибольшее количество раз в каждом из массивов Ошибка при сортировке
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|