Вопрос по потокам:
В скрипте задаётся массив @bas с некоторым количеством элементов...
Создаю процедуру, которая извлекает по одному элементу массива и дописывает его в файл... Сама процедура:
PHP код:
sub gogo
{
my ($name) = @_;
while($elm = shift(@bas))
{
open(OUT, ">> $name.txt");
print OUT "$elm\r\n";
close(OUT);
}
}
Далее создаю несколько потоков, выполняющих функцию gogo и прописываю ждать завершения работы всех потоков...
PHP код:
foreach $ac (@acc)
{
push @threads, threads->create(\&gogo, $ac);
}
foreach my $thread (@threads)
{
$thread->join();
}
Каждый поток создаёт свой файл, куда записывает элементы массива, которые он обработал (извлёк из массива)...
Что я ожидал от работы этого скрипта..?? Ожидал я, что элементы массива @bas будут распределены по файлам потоков.. тоесть первый поток вытащил первый элемент, записал в свой файл, второй поток - второй элемент, и записал уже в свой файл.. и т.д.
А в результате каждый поток пробегает весь массив целиком... Причём я даже пробовал каждому из потоков задать разные задержки.. Почему так происходит, я же извлекаю элементы с помощью shift, который удаляет элемент..?! Как лучше реализовать задуманное..?!