Bonjour à tous,

j'ai une toute petite question, je lis dans les bouquins qu'il fo travailler avec le module Thread de la sorte pour créer un nouvel Objet Thread: $t = Thread->new(\&fonc, $arg1, $arg2) (sans oublier bien sûr: use Thread; en tête de fichier).
Le seul problème est que ça ne marche pas dans le programme qui suit et pour que ça marche, il fo que je remplace Thread par threads: le voilà le programme:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 
#!/usr/bin/perl -w
# prime-pthread, courtesy of Tom Christiansen
 
use strict;
 
use Thread;
use Thread::Queue;
 
my $stream = new Thread::Queue;
my $kid    = Thread->new(\&check_num, $stream, 2);
 
for my $i ( 3 .. 1000 ) {
  $stream->enqueue($i);
} 
 
$stream->enqueue(undef);
$kid->join;
 
sub check_num {
  my ($upstream, $cur_prime) = @_;
  my $kid;
  my $downstream = new Thread::Queue;
  while (my $num = $upstream->dequeue) {
    next unless $num % $cur_prime;
    if ($kid) {
      $downstream->enqueue($num);
    } else {
      print "Found prime $num\n";
      $kid = Thread->new(\&check_num, $downstream, $num);
    }
  } 
  $downstream->enqueue(undef) if $kid;
  $kid->join()         if $kid;
}
c'est juste un tout petit programme pour paralléliser le calcul des nombre premier allant de 3 à 1000.
Il est à noter que ça bloque juste avant de rentrer dans la boucle, chose que g vérifié avec des prints successifs dans le code.
Voilà voilà !!
Si vous avez la réponse merci de m'aider sur ce coup,
@+++,

lagra3