Vampire Geschrieben 24. Oktober 2007 Geschrieben 24. Oktober 2007 Ich habe hier ein Problem mit Perl und Threads. Es müssen ca. 2500 Dateien, verteilt auf ca. 140 Ordner, aus Subversion gezogen werden. Um Zeit zu sparen wollte ich dafür 2 oder 3 Threads parallel laufen lassen. Dazu setze ich folgenden Aufruf ab: $queue1->enqueue(@LibList1); # Queue aufbauen $queue2->enqueue(@LibList2); # Queue aufbauen $thread = new threads(\&worker, $queue1); $thread = new threads(\&worker, $queue2); foreach $thr (threads->list) { if ($thr->tid && !threads::equal($thr, threads->self)) { $thr->join; } } In $queue1 und $queue2 stehen die zu exportierenden Verzeichnisse. &worker ist die Arbeitsprozedur, da passiert das Kopieren: sub worker { # Hier wird aus den Übergaben gelesen, habe ich aber weggelassen! while($queue->pending > 0) { my $verz = $queue->dequeue; `svn export --force $verz`; } return 0; } Der Export funktioniert auch erst mal, ist auch schneller. Aber sobald ein Thread beendet ist, bekomme ich beim $thr->join Fehlermeldungen: Attempt to free unreferenced scalar: SV 0x2595b94, Perl interpreter: 0x242205c line 148. Attempt to free unreferenced scalar: SV 0x2c989e4, Perl interpreter: 0x242205c during global destruction. Attempt to free unreferenced scalar: SV 0x2c989c0, Perl interpreter: 0x242205c during global destruction. Attempt to free unreferenced scalar: SV 0x2c9899c, Perl interpreter: 0x242205c during global destruction. Und der letzte Thread kommt gar nicht mehr zurück, obwohl der Exportvorgang durch ist. Perl wartet sich dann einen Wolf. Dabei ist egal wie viele Threads ich starte, der letzte bleibt immer auf der Strecke. Habe ich irgendwo einen Denkfehler drin? Oder sind diese Systemaufrufe mit `` nicht Thread-geeignet? Gibt es Alternativen, oder besser beerdigen und weiter alles schön nacheinander exportieren? Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.