Показать сообщение отдельно

  #193  
Старый 19.10.2007, 13:10
C!klodoL
Постоянный
Регистрация: 05.06.2007
Сообщений: 335
С нами: 9965892

Репутация: 677
По умолчанию

Цитата:
Сообщение от Spyder  
Предположим у меня есть массив полученный из файла. Предположим есть 10 потоков. Как разбить этот массив на 10 частей и что бы каждый поток работал со своей частью?
на самом деле разбивать ничего не нужно, так же не следует читать весь файл в массив ибо размер его в оперативной памяти будет слишком большим, я когда пишу всякие бруты, наполняю массив паролями, затем потоки дергают из него пароли, когда массив опустеет, он снова заполняется паролями и потоки снова запускаются

пример-
#!/usr/bin/perl

use threads;
use threads::shared;
my @pass : shared; #расшариваем массив

$thr = 10;

open (pass, "<$dic");

Next:
@pass = pass(); #вызываем функцию наполнения массива пасами

#создаем потоки
for(0..$thr)
{
$trl[$_] = threads->create(\&Brut);
}
for(0..$thr)
{
$trl[$_]->join; #ждем пока они завершатся
}

sub Brut
{
while (@pass)
{
$pass = shift @pass;
# тут собственно сам брут #
}
}

goto Next;

#функция заполнения массива пасвордами фром the файлек

sub pass
{
my (@mas);
while (<pass>){
push @mas, $_;
last if (@mas > 300);
}
chomp @mas;
return @mas;
}

Последний раз редактировалось C!klodoL; 19.10.2007 в 23:38..
 
Ответить с цитированием