0 / 0 / 0
Регистрация: 24.07.2013
Сообщений: 72
|
||||||
1 | ||||||
Распараллелить с помощью критической секции14.08.2013, 16:25. Показов 1026. Ответов 8
Метки нет (Все метки)
Здравствуйте форумчане! Дан массив от 1..n, который сортирует числа
например: 1...4 2 1 3 3 вывод 1 2 3 3 Собственно программа сделана, остается теперь распараллелить с помощью критической секции и чтобы пользователь сам мог задавать количество потоков
0
|
14.08.2013, 16:25 | |
Ответы с готовыми решениями:
8
Проход критической секции кода Использование критической секции Добавление в очередь (xQueueSend) внутри критической секции Организовать доступ к критической секции с использованием мьютекса |
26 / 26 / 0
Регистрация: 10.03.2010
Сообщений: 244
|
|
14.08.2013, 17:57 | 2 |
Если я правильно понял, то потоки наперебой должны пытаться выполнить итерацию сортировки. По моему это безсмысленно, т.к. итерацию будет выполнять один поток, а остальные будут "курить", пока критическая секция ни освободит защищаемый участок данных. Но если это какое-то чудаковатое задание, то нужно вызывать EnterCriticalSection перед каждой модификацией и считыванием защищаемых данных (в данном случае arr[]) и после модификации освобождать LeaveCriticalSection. Потоков можно наплодить туеву хучу и складывать хэндлы в динамический одномерный массив. Как-то так. Да и ещё не забудьте перед запуском потоков выполнить InitializeCriticalSection
0
|
163 / 104 / 14
Регистрация: 17.10.2012
Сообщений: 488
|
|
14.08.2013, 18:11 | 3 |
Тогда, наверное, логичнее сделать сортировку Хоара, где каждый рекурсивный (или не каждый) вызов будет выполняться в отдельном потоке
0
|
0 / 0 / 0
Регистрация: 24.07.2013
Сообщений: 72
|
|
14.08.2013, 21:21 [ТС] | 4 |
eXtream, это то понятно, ну а как это сделать на практике? как сделать так чтобы юзер сам задавал число потоков? и еще, если например юзер ввел 4 потока то это означает что массив должен будет разбит на 4 части и каждый поток выполнит свою часть?
0
|
26 / 26 / 0
Регистрация: 10.03.2010
Сообщений: 244
|
|
15.08.2013, 11:34 | 5 |
Всё равно не совсем понятно, если каждый поток будет сортировать N участков массива, то у вас получиться N сортированных, несвязанных между собой, участков, которые в результате придётся пересортировывать. В этом случае критические секции вообще не нужны, т.к. участки ячеек массива между собой не пересекаются
0
|
0 / 0 / 0
Регистрация: 24.07.2013
Сообщений: 72
|
|
15.08.2013, 11:48 [ТС] | 6 |
eXtream, напишите плиз как это делается в коде
0
|
73 / 73 / 18
Регистрация: 29.11.2011
Сообщений: 356
|
|
15.08.2013, 15:51 | 7 |
А можно увидеть, как задание сформулировано?
0
|
0 / 0 / 0
Регистрация: 24.07.2013
Сообщений: 72
|
|
15.08.2013, 16:34 [ТС] | 8 |
Praktolock, Дан массив от 1..n, который сортирует числа
например: 1...5 2 1 3 3 5 вывод 1 2 3 3 5 Собственно программа сделана, остается теперь распараллелить с помощью критической секции и чтобы пользователь сам мог задавать количество потоков в которое должна выполняться программа
0
|
26 / 26 / 0
Регистрация: 10.03.2010
Сообщений: 244
|
||||||
15.08.2013, 18:24 | 9 | |||||
1
|
15.08.2013, 18:24 | |
15.08.2013, 18:24 | |
Помогаю со студенческими работами здесь
9
Переделать код, чтобы вместо критической секции использовался мьютекс Реализация критической секции при наличии только Event'a в качестве средства синхронизации Как распараллелить цикл с помощью Parallel.For? Распараллелить несколько разных процедур с помощью OpenMP Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |