Thread Probleme mit forks.pm
(9 answers)
Opened by SaschaTen at 2007-10-15 17:42
Hallo ich hoffe ihr könnt mir weiterhelfen.
Ich habe ein Skript welches mit Hilfe von forks.pm mehrere Threads startet, diese laufen auch wunderbar parallel, teilen sich auch eine gemeinsame Variable und Änderungen werden auch zu den Anderen Threads durchgereicht. Kurze Erklärung ich frage vorher die Verfügbarkeit einiges Rechner ab, die Rechner welche ich erreiche schreibe ich in ein Array, dieses Array teilen sich die Threads. Wenn ein Thread beginnt sperrt er dieses Array und holt sich einen Rechnernamen mit pop runter. Dann macht er seine Abfragen ist das Array leer sollte sich sich der Thread beenden. Das ganze sollte ähnlich Laufen wie in diesem Testscript hier: Code (perl): (dl
)
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 47 48 49 #!/usr/bin/perl use strict; use forks; use forks::shared; # "Gloabeles" Array als gemeinsame Variable angeben, # somit teilen sich die Threads das Array # statt sich eine Kopier im Adressraum anzulegen my @stack : shared; my $tempvar : shared; $tempvar = 10000; for(my $i = 0; $i < 10000; $i++) { $stack[$i] = $i; } my $thread1 = threads->new(\&echo, 1); my $thread2 = threads->new(\&echo, 2); my $thread3 = threads->new(\&echo, 3); my $thread4 = threads->new(\&echo, 4); $thread1->join(); $thread2->join(); $thread3->join(); $thread4->join(); print "threads erstellt!\n"; sub echo { # Name des Threads my $thread = $_[0]; my $temp=""; do { # sichert das Array vor dem Zugriff des anderen Threads lock @stack; # holt sich den letzten Wert aus dem Array $temp = pop(@stack); $tempvar-= $temp; # aus gabe des Threads open(LOG, ">>thread.log"); print "Thead ".$thread." print ".$temp." uebersprungen".$tempvar."\n"; print LOG $temp."\n"; close(LOG); $tempvar = $temp; # schickt den Thread erst mal schlafen } while($temp >=4) } Mit dem Testscript funktioniert es, mit meinem Richtigen leider nicht! Hatrtet ihr auch schon mal das Problem das sich die Threads mit froks.pm nicht geschlossen haben? und wenn ja wie habt ihr das Probleme gelöst? Das komische ist, wenn ich mein Skript starte sind sofort 2 Skripts da, obwohl normal noch kein Thread laufen dürft! Nach nochmaligen prüfen denke ich das es Probleme mit dem 2. Skript gibt das sich dieses nicht sauber beendet, da die Threads nach ihrem Durchlauf weg sind und via ps aux nicht mehr zu finden sind! Danke für eure Hilfe schon mal im vorraus! -----------
Wer Rechstschreibfehler findet, darf diese behalten und bei Ebay versteigern!!! ----------- Nidar mied där Rächtschraibunk!!! |