Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Perl: Общие вопросы > threads, semaphore |
Автор: qw1mb0 3.12.2011, 23:51 | ||
Добрый день уважаемые форумчане. Появилось необходимость написать программу: Создается 3 параллельных потока которые генерируют массивы по 1000 символов: Вроде как с этим разобрался:
Далее нужно создать еще 1 поток(4 поток), который будет искать среднее арифметическое одинаковых по индексу элементов массива, т.е. например (второй элемент массива из 1 потока + второй элемент массива из 2 потока)/2 Записывается в соответствующий массив. Далее: Создается еще 1 поток, который будет проворачивать ту же операцию с результатами 4 потока и 3 потока по аналогичной схеме сравнения первого и второго потоков. Пока есть соображения только теоретические связанные с семафорами, уже битый час гуглю, но понять так и не могу как можно это реализовать. Вот решил попросить помощи у вас. Заранее спасибо большое за помощь. |
Автор: DurRandir 4.12.2011, 20:03 |
1. use strict! 2. Зачем там sleep 1? 3. Вы пишите в массив, который не будет доступен извне потока. Читайте про :shared 4. Для решения надо понять простой факт - как только ->join для потока вернулся - это означает, что свою работу он выполнил. Этого вполне хватит, чтобы организовать линейное выполнение. |
Автор: qw1mb0 4.12.2011, 22:44 | ||||
DurRandir, 1. Спасибо, что напомнили. 2. И вправду зачем? 3. Читаю и вроде как понял основные положения, НО я не могу понять: я создаю 3 потока в цикле:
Для решения моей задачи будет логично написать подпрограмму которая будет высчитывать среднее арифметическое и заносить это в новый массив для этого запускаем еще 1 поток. Но как можно обратиться именно к массивам @lol которые формируются в каждом отдельном потоке.
|