|
99 / 43 / 16
Регистрация: 25.10.2011
Сообщений: 246
|
|||||||||||
.NET 2.x Многопоточность19.11.2011, 12:12. Показов 4802. Ответов 26
Метки нет (Все метки)
Всем привет, встала резко задача использования многопоточности без повторения переменных массива
Итак имеется массив mas состоящий из 100 элементов от 0 до 99, мне необходимо вывести все эти элементы в 1-10 потоков. Как это сделать вообще не понимаю.
ps: вариант с lock отпадает сразу, я с ним могу сделать, но он блокирует другие потоки и получается процесс выполняться будет в 1 поток т.е
0
|
|||||||||||
| 19.11.2011, 12:12 | |
|
Ответы с готовыми решениями:
26
Многопоточность Многопоточность Многопоточность |
|
185 / 185 / 53
Регистрация: 10.04.2009
Сообщений: 491
|
||||||
| 19.11.2011, 12:59 | ||||||
|
мютексы, семафоры, замки - все это используется для синхронизации, а это очень обширная тема
если вывести массив в потоках, можно обойтись и проще вариантами
0
|
||||||
|
99 / 43 / 16
Регистрация: 25.10.2011
Сообщений: 246
|
|
| 19.11.2011, 13:55 [ТС] | |
|
Parallel нет в .Net Framework 2.0
Можно с List-ами работать, но бывает что хавает 2 раза 1 и то же значение ![]() Просто ctrl+c ctrl+v не вариант тоже использовать....
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 19.11.2011, 14:39 | ||
|
Ну или если вам хорошо с динозаврами, то вручную разбивайте список на сегменты и давайте каждому потоку на обработку отдельный сегмент. В общем-то, в Parallel примерно то же самое и происходит.
0
|
||
|
99 / 43 / 16
Регистрация: 25.10.2011
Сообщений: 246
|
|
| 19.11.2011, 15:51 [ТС] | |
|
kolorotur, я смотрю вы только умничаете, а конкретного ничего, пробовал я передавать печеньки в поток и ничего хорошего не получилось! А про переходи на 4 это мне решать, мне он нафиг не нужен, мне нужен .Net Framework 2.0 и не эра это ждинозавров, просто я привык на нем работать, а переходить на фреймы более высшие с кучей лагов и ненужных функций не хочется!
0
|
|
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 19.11.2011, 15:54 | |
|
Hermein, Лол. Язык развивается. Новые плюшки. Новые исправления. Новые баги конечно тоже, но плюшек-то больше. А кто вам сказал, что вам будут здесь расписывать по полочкам? Есть Parallel, не хотите обновляться? Делайте сами, в посте №4 подсказали как. А готового кода здесь не будет.
1
|
|
|
|
||||||
| 19.11.2011, 17:36 | ||||||
|
Вот держи. Во втором фрэймворке работает. Тут я cделал в консоли, без отдельных классов, просто неохота было заморачиваться (хоть и делал от нечего делать, просто почему-то мне стало интересно). А так можешь переделать и написать свой TPL (грубо говоря
).
1
|
||||||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|||||||||
| 19.11.2011, 18:08 | |||||||||
|
По поводу конкретики можете посмотреть другие мои сообщения. Ну это я так, сумничал ![]() В целом же, вот вам простенький пример как вывести массив в 100 элементов из десяти потоков, где каждый поток выводит свою часть:
Если вам надо чтобы выводилось по порядку, то можно добавить синхронизацию, но в этом случае теряется смысл разбивания на потоки, т.к. каждый последующий поток должен будет ждать окончания работы предыдущего.
1
|
|||||||||
| 19.11.2011, 19:07 | |
|
0
|
|
|
99 / 43 / 16
Регистрация: 25.10.2011
Сообщений: 246
|
|||||||
| 20.11.2011, 11:45 [ТС] | |||||||
|
1 вопрос еще - new Thread(delegate(object o) { Print(arr, offset * 10, 10); }).Start(); Что означает данная строка, точнее delegate(object o) {}-что это за делегат и для чего он нужен? Нельзя использовать например так, просто сложно как-то с потоками:
0
|
|||||||
|
|
|||||||
| 20.11.2011, 12:31 | |||||||
|
целевой метод
в данном случае DoWork(object data)
0
|
|||||||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||||||||
| 20.11.2011, 12:46 | ||||||||
|
Конструктор класса Thread принимает либо делегат ThreadStart, который по сути дела является указателем на метод вида void Foo(). То есть не возвращает значения и не принимает аргументов. Либо делегат вида ParametrizedThreadStart, который имеет вид void Foo(object o), то есть принимает один аргумент типа object. Так как нам надо передать в поток не одну, а три переменных, надо либо оборачивать их в структуру или класс, либо создавать тот самый анонимный метод и в нем просто запускать нужный нам код. Аргумент анонимного метода "object o" в данном случае там ничего не делает, он нужен только для того, чтобы подпись метода совпадала с требованием делегата ThreadStart. Если не пользоваться анонимным методом, то придется обернуть значения для передачи:
В принципе, дополнительный метод ThreadCallback можно убрать и просто передавать один аргумент типа object в метод Print, который его откастит сам, но с точки зрения архитектуры не стоит менять подпись метода для подгона ее под тип вызова. void F() void F(object o) Как видим, там нет метода, принимающего три значения. Потому либо не передаем вообще ничего, либо передаем всего один объект.
2
|
||||||||
|
99 / 43 / 16
Регистрация: 25.10.2011
Сообщений: 246
|
|
| 20.11.2011, 13:06 [ТС] | |
|
Заметил закономерность, что если число потоков более 5...то это провал....некоторые значения могут вылетать....очень странно!!!
0
|
|
|
99 / 43 / 16
Регистрация: 25.10.2011
Сообщений: 246
|
||||||||||||
| 20.11.2011, 13:13 [ТС] | ||||||||||||
ps: при числе потоков 5 и менее оба способа работают безотказно
0
|
||||||||||||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|
| 20.11.2011, 13:22 | |
|
Что вы подразумеваете под словом "провал"? Вылетает исключение? Некоторые числа не отображаются?
0
|
|
|
99 / 43 / 16
Регистрация: 25.10.2011
Сообщений: 246
|
|||
| 20.11.2011, 13:28 [ТС] | |||
|
0
|
|||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 20.11.2011, 13:31 | ||
|
У вас текстовая переменная тоже глобальная для всех потоков, вот они и затирают изменения, внесенные другими потоками. Облочьте ее.
1
|
||
| 20.11.2011, 13:31 | |
|
Помогаю со студенческими работами здесь
20
Многопоточность Многопоточность Многопоточность Многопоточность
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога
Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip"
Извлеките архив и вы увидите. . .
|
|
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога
Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д.
Сборка примера
Скачайте. . .
|
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net
REST сервисы временно не работают, только через Web.
Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
|
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
|