Thread Probleme mit forks.pm (9 answers)
Opened by SaschaTen at 2007-10-15 17:42

SaschaTen
 2007-10-15 17:42
#100854 #100854
User since
2007-10-15
28 Artikel
BenutzerIn
[default_avatar]
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!!!

View full thread Probleme mit forks.pm