Threads mit Perl

Hi,

ich versuche gerade ganz ein ganz einfaches Thread Code-Beispiel mit Perl zu programmieren:

Code:
#!/usr/bin/perl

use threads;
use threads::shared;

sub thread1
{
        my $counter = 0;
        while (1) 
        {   
                print "THREAD 1: ", $counter++, "\n";
                sleep 1;
        }   
}

sub thread2
{
        my $counter = 0;
        while (1) 
        {   
                print "THREAD 2: ", $counter++, "\n";
                sleep 1;
        }   
}

my $thr1 = threads->create(thread1, '');
my $thr2 = threads->create(thread2, '');

Allerdings wird nur thr1 ausgeführt. Der zweite Thread scheint garnicht erzeugt zu werden. Warum?

Grüße
serow
 
LÖSUNG:

Statt

Code:
my $thr1 = threads->create(thread1, '');

muss man

Code:
my $thr1 = threads->create(\&thread1, '');

schreiben. Was der Unterschied ist, ist mir klar. Warum threads->create() aber unterschiedlich reagiert nicht ganz. Falls dazu noch jemand ne Erklärung haben sollte wäre super!

ciao
serow
 
Das create() wird aufgerufen. Wenn man aber keinen Funktionspointer verwendet sondern einen Funktionsnamen, wird die Funktion nicht wieder verlassen. Das widerspricht eigentlich den Perldocs zu Threads, wo es heisst "FUNCTION may either be the name of a function, an anonymous subroutine, or a code ref.". Ich vermute mal, dass es sich dabei um ein plattformspezifisches Problem handelt.
 
Zurück
Oben