0 / 0 / 1
Регистрация: 01.10.2014
Сообщений: 87
|
|||||||||||
1 | |||||||||||
Многопоточная сортировка: синхронизация27.03.2016, 15:22. Показов 1998. Ответов 3
Метки нет (Все метки)
Добрый день, только начал изучать параллельное программирование и решил написать параллельную битоническую сортировку. Суть её в том, что за одну итерацию мы проходим по массиву 2 раза, первый раз переставляя 1 и 2, 3 и 4 и т.д., а второй раз переставляем 2 и 3, 4 и 5 и т.д.
Как я понимаю, нужно использовать n/2 потоков, если всего в массиве n элементов. После прохождения в первый раз массива нужно все подождать все потоки, чтобы вывести промежуточные результаты и затем сортировать со второго элемента. Но с этой синхронизацией у меня и возникли проблемы, несмотря на то, что разделяемых объектов нет и мьютексы использовать не нужно. Вот мой код:
0
|
27.03.2016, 15:22 | |
Ответы с готовыми решениями:
3
Многопоточная сортировка Многопоточная сортировка Шелла Многопоточная сортировка Шелла не делится потоки Многопоточная быстрая сортировка (уменьшить время работы) |
44 / 44 / 19
Регистрация: 04.05.2014
Сообщений: 190
|
|
27.03.2016, 16:21 | 2 |
Обычно создают столько потоков, сколько ядер у процессора. Большее количество потоков компьютер одновременно выполнять не сможет (будет происходить переключение процессора с выполнения одного потока на выполнение другого потока). Зачем создавать поток и сразу после этого ожидать, когда он завершится (выполнять join)? У вас всё равно одновременно не больше 1 потока будет выполняться. Попробуйте сначала написать однопоточную программу, выполняющую вашу задачу.
0
|
0 / 0 / 1
Регистрация: 01.10.2014
Сообщений: 87
|
|||||||||||
27.03.2016, 16:38 [ТС] | 3 | ||||||||||
cordfield, вот я не понимаю, если я в начале объявил объект-поток
0
|
44 / 44 / 19
Регистрация: 04.05.2014
Сообщений: 190
|
|
27.03.2016, 16:54 | 4 |
mishula, стандартные потоки не такие умные. Им можно сказать только при их создании, какую функцию выполнять. Как только произойдёт выход из этой функции, поток завершится.
Можно создать так называемый "thread pool". Он состоит из N потоков и очереди задач. Каждый поток, когда свободен, ждёт появление задачи в очереди. Когда задача появляется, поток берёт её из очереди и выполняет. Когда задач нет, завершения потока не происходит, а вызывается функция ожидания появления задач в очереди.
0
|
27.03.2016, 16:54 | |
27.03.2016, 16:54 | |
Помогаю со студенческими работами здесь
4
многопоточная программа Многопоточная работа программы Многопоточная версия программы работает медленнее однопоточной Многопоточная программа, thread не поддерживается моим компилятором Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |