Hallo,
Ich habe mir Threads deklariert und ihnen Referenzen auf Variablen übergeben, ich kann den Wert der Variablen auch durch aufösen der Referenzen lesen, aber nicht schreiben. Woran kann das liegen, und wie funktioniert es?
Danke im Vorraus für die Antwort.
hallo mike,
ich nehme an dass du die kind-prozesse abge-forkt hast, so in dieser art:
####
#!/usr/bin/perl use strict; use Data::Dumper; my %hs; my $ref = %hs; $ref->{"all"}="ueberall"; print "M1:$$ ".Data::Dumper->Dumpxs([$ref], ['ref'])."\n"; my $child = fork;
if ($child == 0) { #kind print "C1:$$ ".Data::Dumper->Dumpxs([$ref], ['ref'])."\n"; $ref->{"cld"}="child "; sleep 1; print "C2:$$ ".Data::Dumper->Dumpxs([$ref], ['ref'])."\n"; } else { #papa $ref->{"par"}="parent"; print "P1:$$ ".Data::Dumper->Dumpxs([$ref], ['ref'])."\n"; sleep 2; print "P2:$$ ".Data::Dumper->Dumpxs([$ref], ['ref'])."\n"; } ####
nun ist sicherlich zu erwaren das an P2 in dem hash 3 einträge stehen all, cld und par. leider werden beim fork _alle_ variablen dupliziert. eine mögliche lösung dafür ist den shared-memory zu nutzen. entweder direkt mit shmget,shmwrite ..usw, dies ist nicht sehr bequem.
die perl-objekt variante sollte mit IPC::Shareable gehen. ich habe mich in den letzten tagen damit schon rumgeschlagen, es geht aber irgendwie nicht. -> gleich noch eine unabhängige nachricht in die liste geschrieben.
gruss thomas
Hallo Thomas,
Nein ich verwende keine forks, sonder die von Perl mitgelieferte Threads Bibliothek.
Die Threads vererben die Variablen die vor ihrer Geburt erstellt wurden, verändert jedoch mein Hauptprogamm den Inhalt der Variablen, behält der Thread den alten Wert. Es gibt 2 Möglichkeiten Variablen untereinander auszutauschen. 1. Variablen als shared deklarieren, oder eine Queue (Warteschlange) bauen. Aber da die Variablen keine Skalare oder Arrays sind, funktioniert das nicht. Ich muss also eine Möglichkeit finden die mir den aktuellen Inhalt einer Variable in der Hauptroutine zurückgeben kann.
Irgendwelche Ideen? Wenn verlangt schick ich mal nen Beispielcode an dems hängt.
lug-dd@mailman.schlittermann.de