Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Системное программирование > pop из потока


Автор: Валерия 4.2.2009, 20:45
Код

open(file, "file.txt");
@list=<file>;
close file;


for my $i (1..10) {
    push @threads, threads->create(\&get_now, $i);
}


foreach my $thread (@threads) {
    $thread->join();
}

sub get_now {
    print pop @list;
    print "\n";
}

Вот такой код должен вывести каждую строку из файла file.txt
Но выводит только последнюю 10 раз.
Если это дело не запихывать в потоки - то нормально работает.
Я так поняла что pop не может изменить глобальный массив, а лишь может прочитать?
Функция ведь прочитывает последний елемент и удаляет его...

Автор: FooBar 4.2.2009, 21:09
в поток попадает копия массива, чтобы сделать его общим нужно использовать threads::shared http://perldoc.perl.org/threads/shared.html

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)