Archiv verlassen und diese Seite im Standarddesign anzeigen : Mehrere Threads mit perl...
sammy83@web.de
10-01-2002, 09:49
gibt es eine möglichkeit in perl mehrere threads parallel auszuführen? falls ja, bitte ein einfaches beispiel ;-)
Thx 4 ur answers ;-)
sammy83@web.de
10-01-2002, 11:09
danke für das beispiel, haste noch eine kleine erklärung, was der da wo ganz genau amcht?
nö, das Dings ist schon besser als nötig dokumentiert. Wenn Du damit was anfangen willst brauchst Du ohnehin die Basics von Perl.
es gibt jede Menge Tutorials im Web
Grundsätzlich ist zu fork nur zu sagen das einen identischen Prozess durch kopieren erzeugt, der sich nur durch die Prozess-ID von den anderen unterscheidet.
Gruß
fork
Ich brauch das Beispiel auch mal.
Ich möchte nämlich über mehrere Threads über STDIN eingeben und gleichzeitig ausdrucken können.
Ich weiß nun wies funktioniert.
Ich weiß nur nicht wie ich einem Thread Variablen während der Laufzeit übergebe, denn angenommen
ich deklarier mir im Hauptprogramm eine Variable und starte dann den Thread, kann der Thread auf den
Wert der Variable zugreifen, aber ändere ich den Wert der Variable vom Hauptprogramm aus behält sich der Thread den alten Wert, wie kann ich den Thread als 'updaten'?
Du möchtest also das sich zwei bereits gestartete Threads miteinander unterhalten?
Möglichkeiten:
- IPC (Interprocess communication)
- über TCP/IP -> Sockets
- über Dateien
Ich hab' eigentlich nur das einfachste(Das mit den Dateien) mal angerissen.
Gruß
Tobias
Ich hab hier folgenden Quelltext gefunden, bei dem sich Threads über Queues unterhalten. Das funktioniert aber nicht.
#!/usr/bin/perl -w
use Thread;
use Thread::Queue;
$queue = Thread::Queue->new();
$producer = Thread->new(\&produce, $queue);
$consumer = Thread->new(\&consume, $queue);
$producer->join();
$consumer->join();
sub produce {
my ($queue) = @_;
foreach $i (1..10) {
$queue->enqueue($i);
print "Produced $i\n";
sleep(rand(3));
}
print "fertig\n";
}
sub consume {
my ($queue) = @_;
my $val;
do {
$val = $queue->dequeue();
print "Consumed $val\n";
} while($val != 10);
}
Aber das hier funktioniert. Lag an der falschen (veralteten) Bilbiothek Thread anstatt threads!
#!/usr/bin/perl -w
use threads;
use Thread::Queue;
my $warteschlange = Thread::Queue->new;
$producer = threads->new(\&produce);
$consumer = threads->new(\&consume);
$producer->join();
$consumer->join();
sub produce {
while (1) {
$i++;
$warteschlange->enqueue($i);
print "Produced $i\n";
sleep(rand(3));
}
#print "fertig\n";
}
sub consume {
while (1) {
my $i = $warteschlange->dequeue;
print "Consumed $i\n";
}
}
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.