[PERL] plusieurs tie(tableau)

plusieurs tie(tableau) [PERL] - Perl - Programmation

Marsh Posté le 14-12-2011 à 10:31:22    

Bonjour,
 
J'ai un probleme avec mes tie() (pour faire de la communication inter-process)
Je n'arrive pas a faire plusieurs tie() dans un même programme.
 
Quand je fais:

Code :
  1. my @tabProc_temp=();
  2. my @tabProcEnCours=();
  3. my @tabProcFini=();
  4. my $i=0;
  5. my %options = (
  6.     create    => 1,
  7.     exclusive => 0,
  8.     mode      => 0644,
  9.     destroy   => 1,
  10. );
  11. print "tabProcFini: @tabProcFini\n";
  12. print "tabProcEnCours: @tabProcEnCours\n";
  13. print "tabProc_temp: @tabProc_temp\n";
  14. tie @tabProcFini, 'IPC::Shareable', 'data', \%options;
  15. tie @tabProcEnCours, 'IPC::Shareable', 'data', \%options;
  16. tie @tabProc_temp, 'IPC::Shareable', 'data', \%options;
  17. @tabProc_temp=@tabProc;
  18. print "tabProcFini: @tabProcFini\n";
  19. print "tabProcEnCours: @tabProcEnCours\n";
  20. print "tabProc_temp: @tabProc_temp\n";


 
Au lieu d'avoir @tabProcFini vide, @tabProcEnCours vide et seulement @tabProc_temp de renseigné, ils ont tous récupérés la valeur de @tabProc_temp.
 
En effet, le résultat est:

Code :
  1. tabProcFini:
  2. tabProcEnCours:
  3. tabProc_temp:
  4. tabProcFini: Job=HASH(0x91dce78) Job=HASH(0x9224304) Job=HASH(0x91dd070) Job=HASH(0x9217734) Job=HASH(0x91d3118) Job=HASH(0x92180a0) Job=HASH(0x91d7f5c) Job=HASH(0x921506c) Job=HASH(0x91ffd94)
  5. tabProcEnCours: Job=HASH(0x91d7fec) Job=HASH(0x91d7f80) Job=HASH(0x91dd868) Job=HASH(0x92180c4) Job=HASH(0x9200c58) Job=HASH(0x91f40cc) Job=HASH(0x91dd844) Job=HASH(0x91f3850) Job=HASH(0x91ffbf0)
  6. tabProc_temp: Job=HASH(0x92243d0) Job=HASH(0x91dd9d0) Job=HASH(0x92177ac) Job=HASH(0x91f3610) Job=HASH(0x9217c50) Job=HASH(0x9224010) Job=HASH(0x9217788) Job=HASH(0x91d7d28) Job=HASH(0x9217ee4)


 
Donc on voi bien que juste apres le tie(), ils recuperent tous les memes valeures.
 
Avez vous une idée sur la source du probleme?
 
Merci,
Cordialement,
Benjamin.


Message édité par Super_carotte le 14-12-2011 à 10:31:52
Reply

Marsh Posté le 14-12-2011 à 10:31:22   

Reply

Marsh Posté le 14-12-2011 à 12:09:52    

Il faudrait pas appeller 'data' les 3 zones de mémoire partagée, mais 'dta1', 'dta2' et 'dta3' je pense. (identificateur sur 4 caractères, donc pas data1, data2 et data3)
A+,


Message édité par gilou le 14-12-2011 à 12:10:56

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 14-12-2011 à 12:18:49    

Merci pour cette réponse,
Je m’étais posé la question et j’avais en effet essayé de changer ce nom mais ça n'a pas résolu le probleme.
 
Avec le code:

Code :
  1. my @tabProc_temp=();
  2. my @tabProcEnCours=();
  3. my @tabProcFini=();
  4. my $i=0;
  5. my %options = (
  6.     create    => 1,
  7.     exclusive => 0,
  8.     mode      => 0644,
  9.     destroy   => 1,
  10. );
  11. print "tabProcFini: @tabProcFini\n";
  12. print "tabProcEnCours: @tabProcEnCours\n";
  13. print "tabProc_temp: @tabProc_temp\n";
  14. tie @tabProcFini, 'IPC::Shareable', 'data1', \%options;
  15. tie @tabProcEnCours, 'IPC::Shareable', 'data2', \%options;
  16. tie @tabProc_temp, 'IPC::Shareable', 'data3', \%options;
  17. @tabProc_temp=@tabProc;
  18. print "tabProcFini: @tabProcFini\n";
  19. print "tabProcEnCours: @tabProcEnCours\n";
  20. print "tabProc_temp: @tabProc_temp\n";


 
J'ai toujours comme résultat:

Code :
  1. tabProcFini:
  2. tabProcEnCours:
  3. tabProc_temp:
  4. tabProcFini: Job=HASH(0x8f7207c) Job=HASH(0x8f927cc) Job=HASH(0x8f95ad4) Job=HASH(0x8f98d4c) Job=HASH(0x8f9e868) Job=HASH(0x8f996b8) Job=HASH(0x8f95a74) Job=HASH(0x8f9f1f8) Job=HASH(0x8f9f57c)
  5. tabProcEnCours: Job=HASH(0x8f76c2c) Job=HASH(0x8f95c9c) Job=HASH(0x8f99694) Job=HASH(0x8f996dc) Job=HASH(0x8f9f540) Job=HASH(0x8f7c834) Job=HASH(0x8f90984) Job=HASH(0x8fb81f8) Job=HASH(0x8fb8a90)
  6. tabProc_temp: Job=HASH(0x8f92898) Job=HASH(0x8f99634) Job=HASH(0x8f98dc4) Job=HASH(0x8f76a28) Job=HASH(0x8f99268) Job=HASH(0x8f924d8) Job=HASH(0x8f98da0) Job=HASH(0x8f9e6e8) Job=HASH(0x8fb8c28)


 
Le probleme persiste donc.
 
Merci tout de même,
Benjamin

Reply

Marsh Posté le 14-12-2011 à 12:23:29    

J'ai également essayé:

Code :
  1. my @tabProc_temp=();
  2. my @tabProcEnCours=();
  3. my @tabProcFini=();
  4. my $i=0;
  5. my %options = (
  6.     create    => 1,
  7.     exclusive => 0,
  8.     mode      => 0644,
  9.     destroy   => 1,
  10. );
  11. print "tabProcFini: @tabProcFini\n";
  12. print "tabProcEnCours: @tabProcEnCours\n";
  13. print "tabProc_temp: @tabProc_temp\n";
  14. tie @tabProcFini, 'IPC::Shareable', 'data1', \%options;
  15. tie @tabProcEnCours, 'IPC::Shareable', 'data2', \%options;
  16. tie @tabProc_temp, 'IPC::Shareable', 'data3', \%options;
  17. (tied @tabProc_temp)->shlock;
  18. @tabProc_temp=@tabProc;
  19. (tied @tabProc_temp)->shunlock;
  20. (tied @tabProcFini)->shlock;
  21. @tabProcFini=();
  22. (tied @tabProcFini)->shunlock;
  23. (tied @tabProcEnCours)->shlock;
  24. @tabProcEnCours=();
  25. (tied @tabProcEnCours)->shunlock;
  26. print "tabProcFini: @tabProcFini\n";
  27. print "tabProcEnCours: @tabProcEnCours\n";
  28. print "tabProc_temp: @tabProc_temp\n";


 
Donc en spécifiant bien l’ouverture et la fermeture des tie avant de les utiliser mais ça ne change rien.

Reply

Marsh Posté le 14-12-2011 à 12:25:56    

AU TEMPS (édited   :ange: ) POUR MOI !
Et désolé pour ce multi post.
 
En effet, c'est la subtilité du "4 caractères" que je n’avais pas vu.
 
ça fonctionne mainenant en ayant mis:  

Code :
  1. tie @tabProcFini, 'IPC::Shareable', 'dat1', \%options;
  2. tie @tabProcEnCours, 'IPC::Shareable', 'dat2', \%options;
  3. tie @tabProc_temp, 'IPC::Shareable', 'dat3', \%options;


 
Merci beaucoup,
Bonne continuation,
Benjamin.
 
PS (je ne peux pas passer le suje en résolu car je suis le dernier posteur)


Message édité par Super_carotte le 14-12-2011 à 14:39:23
Reply

Marsh Posté le 14-12-2011 à 13:39:42    

AU TEMPS pour moi! :D http://hfr.toyonos.info/generateurs/nazi/?t=grammar
 
Je m'étais fait initialement avoir moi aussi sur ce coup des 4 caractères en écrivant ma réponse, je ne l'ai vu qu'a la relecture après avoir posté.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed