[Rio-pm] Multi threads

Bruno Buss bruno.buss em gmail.com
Domingo Março 11 18:29:06 PDT 2012


2012/3/11 Aureliano Guedes <guedes_1000 em hotmail.com>

>  Opa, Bruno, valeu a resposta, mas vamos ver se eu entendi
>
>  eu poderia fazer assim:
>
>
>    1.     use <http://perldoc.perl.org/functions/use.html> threads;
>    2.
>    3.     for (my $i =1; $i = 5; $i++){
>    4.     my <http://perldoc.perl.org/functions/my.html> $thr = threads->create(\&sub1);
>    5.
>    6.     sub sub1 {
>    7.
>    8.     }
>    9. }
>
> Mas assim não ocorreria  execução simultanea, certo? Pois cada execução
> iria ocorrer uma por vez a cada contagem do contador.
>

A resposta para sua pergunta: errado.
Porém sua explicação está "correta"... a cada iteração do for, será criada
uma nova thread, então você terá disparado diversas threads até o final do
for.

Agora, o ponto em ser simultâneo é um pouco mais complicado: depende de
quantos cores tem seu sistema (se tiver menos cores que threads utilizadas,
então as threads estarão executando de forma concorrente e não simultânea),
depende do escalonador de tarefas do seu sistema operacional, dependo do
que a sua sub1 faz, etc.

Mas acho que a sua dúvida é um pouco mais básica do que isso...

Fazer:
for (my $i =1; $i <= 5; $i++){
[alguma coisa]
}

é essencialmente igual a fazer [alguma coisa] 5 vezes (tirando o fato que
você pode utilizar o parâmetro do for para fazer alterações):
[alguma coisa]
[alguma coisa]
[alguma coisa]
[alguma coisa]
[alguma coisa]

No seu caso,
for (my $i =1; $i <= 5; $i++){
my $thr = threads->create(\&sub1);
}

É igual a fazer:
my $thr = threads->create(\&sub1);
my $thr = threads->create(\&sub1);
my $thr = threads->create(\&sub1);
my $thr = threads->create(\&sub1);
my $thr = threads->create(\&sub1);

Que é exatamente o que você queria, não? ;-)

[ ]'s
-- 
Bruno C. Buss
http://brunobuss.wordpress.com/
http://www.dcc.ufrj.br/~brunobuss/
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/rio-pm/attachments/20120311/80ec76dd/attachment-0001.html>


Mais detalhes sobre a lista de discussão Rio-pm