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:
c'est juste un tout petit programme pour paralléliser le calcul des nombre premier allant de 3 à 1000.
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; }
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
Partager