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 :

Problème de référence


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 73
    Par défaut Problème de référence
    Salut a tous, j'ai un programme perl qui utilise des threads et ces threads essaie accède a un fichier dbm dans lequel je stocke des hachages , j'avais un problème d'accès concurentiel j'ai donc décidé de reprendre la lib Thread::Queue mais lié avec un dbm et pas un tableau. Mon problème c'est que seulement une partie de mon code marche


    Voila le code en question :

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    package DBM;
    use threads::shared;
    use strict;
    use Fcntl;
    use MLDBM qw(DB_File Storable);
     
     
    sub new
    {
      my $class = shift;
      tie my %dbm, 'MLDBM' ,'Document.dbm', O_CREAT|O_RDWR or die $!;
      share(%dbm);
      return bless \%dbm, $class;
    }
     
     
    sub dequeue
    {
      my $q = shift;
      lock(%$q);
      cond_wait %$q until %$q;
      cond_signal %$q if scalar keys %$q > 1;
      if ( my ($c, $v) = each(%$q) )
      {
        return $v;
      }
    }
     
     
    sub enqueue
    {
      my $q     = shift;
      my $value = shift;
      lock(%$q);
      $q->{$value->{'url'}} = $value and cond_signal %$q;
    }
     
     
    sub pending
    {
      my $q = shift;
      lock(%$q);
      return scalar keys %$q;
    }
     
    1;

    Quand je fait un pending le script me renvie bien 0 sans planter, mais quand je fait un enqueue la perl me plante en disant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Uncaught exception from user code:
    	Invalid value for shared scalar at C:\DOCUME~1\Siaoly\Bureau\/DBM.pm line 35.
     at C:\DOCUME~1\Siaoly\Bureau\/DBM.pm line 35
    	DBM::enqueue('DBM=HASH(0x18fbb38)', 'HASH(0x1b73c3c)') called at C:\DOCUME~1\Siaoly\Bureau\0.pl line 14
    la ligne en question est celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $q->{$value->{'url'}} = $value and cond_signal %$q;

    pour tester mon code j'ai utilise ce petit script sans threads pour l'instant:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/usr/bin/perl -w
    use strict;
    use diagnostics;
    use threads;
    use DBM;
     
    my $Queue = DBM->new;
     
     
     $Queue->enqueue( { url => 'maison', teste => 2 } );

    Merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 73
    Par défaut
    J'ai trouvé d'on provient mon problème, il ne faut pas charger la lib
    threads
    , le problèpme c'est que dans mon applie j'en est besoin

  3. #3
    Mr6
    Mr6 est déconnecté
    Membre émérite

    Homme Profil pro
    Inscrit en
    Septembre 2004
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2004
    Messages : 608
    Par défaut
    Je crois que tu utilises cette lib :
    http://search.cpan.org/~jdhedden/thr....42/threads.pm

    et qu'il vaut mieux utiliser celle-ci :
    http://search.cpan.org/~nwclark/perl.../lib/Thread.pm

    à confirmer bien sûr

    @+
    Mr6

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 73
    Par défaut
    Merci de ton aide mais malheuresement c'est cette lib qu'il me faut absolument http://search.cpan.org/~jdhedden/thr....42/threads.pm

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 73
    Par défaut
    J'ai relue la doc du module threads et j'ai fini par y trouver ma solution il y est stipulé qu'avant d'utiliser threads::shared il faut déclarer le module threads mais avant celui-ci j'ai donc fait cela


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/usr/bin/perl -w
    use threads;
    use strict;
    use diagnostics;
    use DBM;
     
    my $Queue = DBM->new;
     
     
     $Queue->enqueue( { url => 'maison', teste => 2 } );
    Et sa marche , vraiment étrange ce module

  6. #6
    Membre Expert
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Par défaut
    Citation Envoyé par Mr6
    Je crois que tu utilises cette lib :
    http://search.cpan.org/~jdhedden/thr....42/threads.pm

    et qu'il vaut mieux utiliser celle-ci :
    http://search.cpan.org/~nwclark/perl.../lib/Thread.pm

    à confirmer bien sûr

    @+
    Mr6
    Hum, petite info, la lib Thread est dépassée, il vaut mieux utiliser threads en fait

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

Discussions similaires

  1. [VBA-E] Problème de références
    Par Elstak dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 13/07/2006, 09h04
  2. Problème de référence de classe
    Par nmathon dans le forum Delphi
    Réponses: 7
    Dernier message: 21/06/2006, 16h46
  3. [FLASH MX2004] this et problème de référence
    Par cristolb dans le forum ActionScript 1 & ActionScript 2
    Réponses: 5
    Dernier message: 03/05/2006, 22h33
  4. Problème de référence de données circulaire
    Par Wismerhill50 dans le forum Langage
    Réponses: 3
    Dernier message: 23/10/2005, 22h38
  5. problème de références _ptr dans une map STL
    Par Mr_Tyu dans le forum CORBA
    Réponses: 1
    Dernier message: 10/08/2004, 10h39

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