IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

[Perl 5.10] Les Threads empêchent le programme de se terminer


Sujet :

Langage Perl

  1. #1
    Invité
    Invité(e)
    Par défaut [Perl 5.10] Les Threads empêchent le programme de se terminer
    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;
    }
    Dernière modification par Invité ; 19/12/2008 à 16h40.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Ok, ok... après quelques recherches, il semble que l'utilisation du module Win32::OLE soit incompatible avec l'utilisation du module threads....

    J'ai simplifié mon code en n'utilisant plus le module Win32::OLE, et le programme se termine correctement...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Perl/Tk et les Threads
    Par djibril dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 27/09/2014, 10h33
  2. Réponses: 2
    Dernier message: 19/02/2011, 12h04
  3. [Thread]Lancer mon programme toutes les 60 secondes?
    Par danje dans le forum Concurrence et multi-thread
    Réponses: 10
    Dernier message: 24/11/2005, 21h55
  4. [langage] Perl a t'il été compiler avec les threads
    Par vodevil dans le forum Langage
    Réponses: 2
    Dernier message: 07/05/2005, 15h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo