Bonjour,
Je m'intéresse actuellement au module threads. Ca va plus ou moins bien. Voici mon problème:
J'écris le code suivant.
Je défini 2 tableaux, un tableau partagé entre les threads.
Je créé 2 threads avec la référence aux tableaux en paramètre.
La fonction calcul traite et écrit dans le tableau partagé en le verrouillant/déverrouillant à chaque écriture.
Le programme s'exécute bien, ne me retourne pas d'erreur (j'effectue différents print qui m'indiquent que les actions sont bien effectuées). Mais il ne me rend pas la main... Les 2 threads exécutent bien leur fonction et le programme attend.
Ai-je oublié une fonction pour mettre fin aux 2 threads ? La fonction join doit s'en occuper normalement non ?
Merci pour vos réponses.
Environnement:
Perl 5.10
Windows XP SP2
Code Perl : 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 #!C:/perl/bin/perl.exe use strict; use warnings; use Win32::OLE qw( in ); use threads; use threads::shared; # les 2 listes à traiter en parallèle my @array1 = ('valeur1','valeur2','valeur3'); my @array2 = ('valeur4','valeur5','valeur6'); # je partage my @result :shared; # je passe la référence aux listes en paramètre des threads my $th1 = threads->new(\&calcul, \@array1); my $th2 = threads->new(\&calcul, \@array2); my @t1 = $th1->join(); my @t2 = $th2->join(); sub calcul { my ($list) = @_; foreach (@{$list}) { # ici je fais ma sauce # appel à des fonctions { lock(@result); # qui écrivent dans @result } } return 1; }
Partager