Уже поздно, немного подтупливаю, а еще когда и не знаешь... вообще сложно. Подскажите пожалуйста как организовать очередь потоков на обработку файлов:
#!/usr/bin/perl -w --
use strict;
use warnings;
package main;
use threads;
use threads::shared;
my @files = qw(1111.txt 2222.txt 3333.txt 4444.txt 5555.txt 6666.txt 7777.txt 8888.txt 9999.txt 0000.txt);
sub getfile {
my $file = pop(@files);
print threads->tid(), ': ', $file, "\n";
threads->yield();
}
sub main {
my @files :shared;
my @t;
for (0 .. scalar(@files) / 5) {
push(@t, threads->create( sub { getfile() } ));
}
$_->join foreach (@t);
threads->exit();
}
&main;
1;
Основная задача - это получение массива с именами файлов и обработка его в указанное кол-во потоков(5).
Т.е. при создании потока берется элемент массива с удалением на обработку, потом берется следующий и так пока не достигнет 5-ти потоков.
Потом когда очередной поток завершается - берется еще элемент на обработку.
Т.е. нужно реализовать что-то вроде стека.