|
1 / 1 / 1
Регистрация: 04.04.2014
Сообщений: 14
|
|
Определение четности чисел в большом объеме данных, используя 10 потоков04.04.2014, 06:52. Показов 1223. Ответов 11
Метки нет (Все метки)
Как такое можно решить? Мозги кипят, вижу что при помощи Мютекса, но как? есть список типа int размером допустим 1000000 из произвольных чисел. При нажатии на кнопку ты должен запустить 10 потоков и дождаться их завершения. Каждый из потоков должен забрать себе одно число из списка и проверить четное оно или нет. если четное, увеличить общий счетчик. В итоге мы просто посчитаем количество четных чисел в списке с помощью нескольких потоков. используя Task и BlockingCollection. Помогите пожалуйста
0
|
|
| 04.04.2014, 06:52 | |
|
Ответы с готовыми решениями:
11
Быстрый поиск в большом объеме данных
Как правильнее работать с базой при большом объеме данных? |
|
192 / 199 / 82
Регистрация: 11.04.2013
Сообщений: 1,086
|
|||||||
| 04.04.2014, 07:54 | |||||||
|
1 поток проверяет 0-100000 2 поток проверяет 100000-200000 ...... далее поток находит четное число блокируем общий счетчик и инкрементируем его
что бы не использовать блокировок можно для каждого потока сделать отдельный счетчик , а потом просуммировать их по завершению
1
|
|||||||
|
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
|
||
| 04.04.2014, 11:08 | ||
|
Добавлено через 1 минуту хотя в условии задачи четко сказано реализовать общий счетчик - это пример на решения проблемы общего ресурса потоков, а не рабочий пример
1
|
||
|
1 / 1 / 1
Регистрация: 04.04.2014
Сообщений: 14
|
|
| 04.04.2014, 11:26 [ТС] | |
|
Так а как это все вооплотить? мозги уже кипят
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|||||||
| 04.04.2014, 14:11 | |||||||
Сообщение было отмечено Richi9 как решение
РешениеНа примере консольного приложения:
1
|
|||||||
|
Master of Orion
|
||||||
| 04.04.2014, 14:35 | ||||||
|
kolorotur,
2
|
||||||
|
52 / 45 / 4
Регистрация: 07.10.2010
Сообщений: 95
|
||||||
| 04.04.2014, 16:34 | ||||||
|
Не думаю, что на такой задаче использоваие синхронизации оправданно. Скорее всего 90% времни было потраченно на нее.
Мы не изменяем массив? Нет. Следовательно его можно использовать во всех тасках. Можем ли мы выделить незавиисящий от других участок работы? Да. Мы можем масив разбить на куски и считать кол-во чисел в этом куске. Если бы пользоваться всякими Parellel было нельзя, то я наверно сделал бы так:
1
|
||||||
|
1 / 1 / 1
Регистрация: 04.04.2014
Сообщений: 14
|
|
| 04.04.2014, 17:14 [ТС] | |
|
Всем огромное спасибо
0
|
|
|
Master of Orion
|
|
| 04.04.2014, 20:23 | |
|
serefa, в моем варианте синхронизация происходит только 1 раз для каждого потока.
У вас же что-то странное. После цикла там будет просто лежать последнее значение. Да и сделали вы примерно то же, что и мы выше, только чуть дольше - сначала будет дожидатся выполнение всех потоков, а они могли бы тем временем уже частично сумму сложить.
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|
| 04.04.2014, 22:51 | |
|
Psilon, ну да, так оно экономичнее
0
|
|
|
52 / 45 / 4
Регистрация: 07.10.2010
Сообщений: 95
|
||||||
| 05.04.2014, 21:14 | ||||||
|
Быстро печатал. Вместо =+ написал =.
Дальше:
49993550 49993550 Slution1 - 15749 Milliseconds Slution2 - 278 Milliseconds В вашем решении самая стремная часть - это BlockingCollection. На сколько я помню - по умолчанию это ConcurrentQueue. А там 100% синхронизация, когда достается элемент. Это раз. И два - нафига она тут нужна? Массив не меняется. Из него ни чего не удаляется и не добавляется. Неизменяемые данные можно шарить между потоками. Добавлено через 21 минуту Psilon Даже последовательное выполнение быстрее твоего параллельного ![]() 16185 - твое 1165 - тупой прогон форыча.
0
|
||||||
|
Master of Orion
|
||
| 05.04.2014, 21:49 | ||
|
serefa, не мое, я просто показал что интерлокед в цикле не нужен.
Что касается твоего кода, то очевидно, что на тасках без синхронизации будет намного быстрее Хотя полученный эффект в замедлении известен, нужно просто настраивать нормально многопоточность) но медленнее тасков будет все равно, факт. Добавлено через 1 минуту
0
|
||
| 05.04.2014, 21:49 | |
|
Помогаю со студенческими работами здесь
12
Определение четности/нечетности чисел Определение четности и замена чисел memo статус бар тормозит при большом объёме Оптимизация кода скрипта при большом объеме информации Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях.
Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её.
Последовательность действий:. . .
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|