J'ai un CGI qui appelle trois threads :
$thr1 = threads->new(\&sub1, "linux");
$thr2 = threads->new(\&sub1, "bsd");
$thr3 = threads->new(\&sub1, "windows");
Ensuite, je fais en sorte d'attendre les threads :
$data1 = $thr1->join;
$data2 = $thr2->join;
$data3 = $thr3->join;
La fonction sub1 est assez stupide :
sub sub1 {
my @Parametres = @_;
return "\"@Parametres\"";
}
Trois fois sur quatre, le script plante lors de l'appel au troisième thread...
Si je rajoute un sleep (5) dans la fonction, par contre, ça marche.
sub sub1 {
my @Parametres = @_;
return "\"@Parametres\"";
sleep (5);
}
Je ne comprends pas trop bien ces problèmes. Quelque-chose m'échappe-t-il (c'est la première fois depuis longtemps que je retravaille avec des threads et je débute en Perl) ?
Merci pour votre aide.
# Oups
Posté par Robert VISEUR (site web personnel) . Évalué à 2.
sleep (5);
return "\"@Parametres\"";
# maizencor ?
Posté par Krunch (site web personnel) . Évalué à 2.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
[^] # Re: maizencor ?
Posté par Robert VISEUR (site web personnel) . Évalué à 2.
[^] # Re: maizencor ?
Posté par Robert VISEUR (site web personnel) . Évalué à 2.
[^] # Re: maizencor ?
Posté par Krunch (site web personnel) . Évalué à 2.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
[^] # Re: maizencor ?
Posté par Robert VISEUR (site web personnel) . Évalué à 2.
# Le troisième JOIN
Posté par Robert VISEUR (site web personnel) . Évalué à 2.
http://www.developpez.net/forums/viewtopic.php?t=398425(...)
C'est précisement le troisième join qui cale...
[^] # Re: Le troisième JOIN
Posté par gnujsa . Évalué à 3.
Pour diagnostiquer les erreurs tu peux t'aider des pragmas strict et diagnostics:
#!/usr/bin/perl -w
use strict;
use diagnostics;
use threads;
sub sub1 {
my @Parametres = @_;
return "\"@Parametres\"";
}
my $thr1 = threads->new(\&sub1, "linux");
my $thr2 = threads->new(\&sub1, "bsd");
my $thr3 = threads->new(\&sub1, "windows");
my $data1 = $thr1->join;
my $data2 = $thr2->join;
my $data3 = $thr3->join;
print "data1: $data1\ndata2: $data2\ndata3: $data3\n"
$ perl ./threads2.pl
data1: "linux"
data2: "bsd"
data3: "windows"
[^] # Re: Le troisième JOIN
Posté par Robert VISEUR (site web personnel) . Évalué à 2.
Le code marche, en effet. J'ai changé d'hébergeur pour ce site et tout est maintenant nickel.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.