[Cascavel-pm] Threads
Solli Moreira Honorio
shonorio em terra.com.br
Quarta Agosto 31 10:24:02 PDT 2005
Cara,
Você vai ter que criar o mecanismo de controle da quantidade de threads está sendo executada, eu recomendo você dar uma olhada no link http://migo.sixbit.org/papers/Perl_Threads/slide-index.html para ter uma boa visão sobre threads e http://search.cpan.org/search?query=Threads&mode=all para as ferramentas de threads.
Estou enviando os código abaixos para vc ver como poderia ser 'controlado' estas threads.
<code>
use threads;
use threads::shared;
our $TCounter : shared;
$MaxThreads = 25;
while ( loop de alguma coisa ) {
lock ( $TCounter );
$TCounter++;
my $Thread = threads->create(\&Algumacoisa, $Valor01, $Valor02 );
$Thread->detach();
while ( $TCounter >= $MaxThreads ) {
print "Aguando liberar threads : $TCounter \n";
threads->yield();
sleep 1;
}
}
while ( $TCounter )
{
print "\tAguando fim de threads\n";
sleep 10;
}
sub Algumacoisa {
my ($valor01, $valor02) = @_;
# Faça as coisas..
# e ao terminar ...
lock ( $TCounter );
$TCounter--;
}
</code>
Bom, nesta primeira você viu que o elo fraco está no método 'Algumacoisa', pois se vc sair dele sem diminuir a variável $TCounter, o sistema pode entrar num loop infinito. Para contonar o o problema vc pode colocar timeout no loop.
Uma outra alternativa pode ser algo assim :
<code>
use Thread::Running qw();
use threads;
$MaxThreads = 25;
for ( 1..100 ) {
my $Thread = threads->create(\&Algumacoisa, $_ );
my @Contador = threads->list;
while ( $#Contador >= $MaxThreads ) {
print "Aguardando liberar as threads $#Contador\n";
foreach ( threads->list ) {
if (! $_->running ) {
print "\t", $_->tid, " is not running\n";
$_->tojoin;
pop @Contador;
}
else {
print "\t", $_->tid, " is running\n";
}
}
threads->yield();
sleep 1;
}
}
print "Indo para o final !!\n";
foreach ( threads->list ) {
print "Aguardando thread numero ", $_->tid, "\n";
$_->join;
}
sub Algumacoisa {
my ( $valor02 ) = shift;
# Faça as coisas..
# e ao terminar ...
print "Thread de numero $valor02\n";
sleep 10;
print "Finalizando a thread de numero $valor02\n";
}
</code>
De:cascavel-pm-bounces em pm.org
Para:cascavel-pm em pm.org
Cópia:
Data:Wed, 31 Aug 2005 00:15:50 -0300
Assunto:[Cascavel-pm] Threads
> olá pessoal
>
> cá estou eu mais uma vez pedindo a ajuda para um de vocês.
>
>
> preciso saber o seguinte:
>
> como controlar o número de threads ativos?
> ou seja digamos que meu programa tenha o limite de 25 threads
> e assim que um thread fechar eu abra outro ficando sempre com 25 ativos
> alguem sabe me explicar isso ?
>
> modulos usados:
>
> use Thread;
> use threads;
>
> obrigado.
>
>
> _______________________________________________
> Cascavel-pm mailing list
> Cascavel-pm em pm.org
> http://mail.pm.org/mailman/listinfo/cascavel-pm
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://mail.pm.org/pipermail/cascavel-pm/attachments/20050831/b8cf0c25/attachment.html
Mais detalhes sobre a lista de discussão Cascavel-pm