|
218 / 212 / 63
Регистрация: 17.04.2012
Сообщений: 382
|
||||||
Корректировка работы нескольких потоков с одним циклом17.04.2012, 11:48. Показов 2115. Ответов 10
Метки нет (Все метки)
Привет. Ребята, нужна ваша помощь. Не могу распаралелить поток.
В чем собственно состоит проблема. Сейчас каждый поток выводит числа от 0 до 9, а мне нужно чтоб выводило следующие записи th0 = 0; th1 = 1; th3 = 2; th0 = 4; th2 = 3; th0 = 6; th2 = 5; ...... то есть заданное количество потоков вместе работали с одним цыклом. Один поток выводит одно число, второй второе, третий четвертее, четвертый третее и т.д. Скажу наперед, что явно распределить на сигменты не получить потому, что количестве запичей в цыкле будет менятся от 1 до 5000. Если кому то интересно - то это программа обзвона обенентов под 5 модемов. Каждый модем - отдельныя ветка. То есть каждый модем берет телефон с массива и звонит на него. Такая операция должна паралельно выполнятся под 5 модемов. если я буду явно задавать для каждого модема массив телефнов, то может оказатся, что один можем получит 500 телефнов, второй 30, а все остальные вообще ничего. Поэтому мне и нужно чтоб 5 потоков работали с одной процедурой и работать под 5 потоков с одной процедурой
0
|
||||||
| 17.04.2012, 11:48 | |
|
Ответы с готовыми решениями:
10
Создание нескольких элементов одним циклом
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||||||
| 17.04.2012, 14:25 | ||||||
|
Сделайте одну общую коллекцию с телефонами и сколько-то там потоков.
Пусть эти потоки, синхронизируясь, достают по одному элементу из коллекции и звонят на него, пока все элементы не закончатся.
1
|
||||||
|
218 / 212 / 63
Регистрация: 17.04.2012
Сообщений: 382
|
||||||
| 17.04.2012, 21:48 [ТС] | ||||||
|
все бы ничего но в строке
0
|
||||||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|
| 17.04.2012, 22:02 | |
|
А в первой строке у вас, получается, есть ConcurrentQueue?
0
|
|
|
218 / 212 / 63
Регистрация: 17.04.2012
Сообщений: 382
|
|
| 18.04.2012, 09:16 [ТС] | |
|
да, этой тоже нету. Все написано под Framework 3.5
твой код под 4-ый. Пасиб, в режиме теста все работает, попробую отточить код под 4-й фрейм.
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||||||
| 18.04.2012, 12:03 | ||||||
|
Под 3.5 тоже можно написать, но придется синхронизировать очередь вручную:
1
|
||||||
|
218 / 212 / 63
Регистрация: 17.04.2012
Сообщений: 382
|
||||||
| 18.04.2012, 13:08 [ТС] | ||||||
|
kolorotur, пасиб виручил.
ща разберусь с кодом. потому что с очередями еще не работал. Может кому-то пригодится, код работы 5-и потоков с одним масивом.
0
|
||||||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|
| 18.04.2012, 13:16 | |
|
У вас не синхронизирован доступ к PtrToArray во время проверки.
Может возникнуть ситуация с выходом за пределы массива.
0
|
|
|
218 / 212 / 63
Регистрация: 17.04.2012
Сообщений: 382
|
||||||
| 19.04.2012, 14:44 [ТС] | ||||||
|
так он же лочится при при каждом новом переходе:
не могу смоделировать такую ситуацию, когда он может это сделать.
0
|
||||||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|||||||||||
| 19.04.2012, 15:24 | |||||||||||
|
Он лочится, но только при инкременте, а при проверке - нет.
Ситуацию смоделировать очень легко: Итак, у нас есть следующий цикл:
Предположим, что происходит обход массива из десяти элементов и на данный момент значение PtrToArray = 9, N = 10. Начинаем отслеживание: 1. Первый поток делает проверку. Проверка проходит. 2. Второй поток делает проверку. Проверка проходит. 3. Первый поток создает переменную curVal. 4. Второй поток создает переменную curVal. 5. Первый поток заходит в критическую зону. 6. Второй поток пытается зайти в критическую зону и замораживается, т.к. в ней уже первый поток. 7. Первый поток достает элемент под индексом 9, присваивает его переменной curVal и увеличивает значение PtrToArray до 10-и. 8. Первый поток выходит из критической зоны и выводит сообщение. 9. Второй поток заходит в критическую зону. 10. Второй поток пытается достать элемент под индексом 10 (он ведь уже раньше прошел проверку и "предполагает", что PtrToArray все еще < N) и чпок - вылетает IndexOutOfRangeException. Исправить можно, делая проверку и присваивание значения элементу в критической зоне:
1
|
|||||||||||
|
218 / 212 / 63
Регистрация: 17.04.2012
Сообщений: 382
|
|
| 19.04.2012, 23:17 [ТС] | |
|
Добавлено через 2 минуты
все, въехал.! спасибо, вам, за розъяснения.
0
|
|
| 19.04.2012, 23:17 | |
|
Помогаю со студенческими работами здесь
11
Сделать с одним циклом Программа с одним циклом Замедление работы потоков если запущено несколько потоков Создание потоков циклом Заполнить матрицу одним циклом Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Воспроизведение звукового файла с помощью 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
Решили писать научную статью с неким РОманом
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|