2012-05-01 5 views
0

Perl 5.10.1에서 스레드를 사용하여 테스트를하고 있지만 문제가 있습니다. 우선 2.6.32-5-amd64 (64 비트)의 Debian GNU/Linux squeeze/sid가 있습니다.스레드가있는 Perl 스크립트가 점진적으로 작동하며 비동기 적으로 작동하지 않습니다.

이 내 스크립트

#!/usr/bin/perl -w 
use strict; 
use warnings; 
use threads; 

sub threadProcess{ 
    my ($number, $counter) = @_; 
    print "Enter thread #" . $number . "\n"; 
    while($counter < 10){ 
     print "Thread #" . $number . ": " . $counter . "\n"; 
     $counter++; 
    } 
    print "Exit thread #" . $number . "\n"; 
} 

sub main{ 
    my $counter = 0; 

    my $thr1 = threads->create(\&threadProcess, 1, $counter); 
    my $thr2 = threads->create(\&threadProcess, 2, $counter); 

    my $res1 = $thr1->join(); 
    my $res2 = $thr2->join(); 

    print "Bye...\n"; 
} 

main(@ARGV); 

입니다 그리고 이것은 출력 :

Enter thread #1 
Thread #1: 0 
Thread #1: 1 
Thread #1: 2 
Thread #1: 3 
Thread #1: 4 
Thread #1: 5 
Thread #1: 6 
Thread #1: 7 
Thread #1: 8 
Thread #1: 9 
Exit thread #1 
Enter thread #2 
Thread #2: 0 
Thread #2: 1 
Thread #2: 2 
Thread #2: 3 
Thread #2: 4 
Thread #2: 5 
Thread #2: 6 
Thread #2: 7 
Thread #2: 8 
Thread #2: 9 
Exit thread #2 
Bye... 

어떤 문제가 될 수있다? 미리 감사드립니다!

+0

1000 회 반복 해보십시오. – Mat

+0

감사합니다. 하하하. 나는 그 부분을 그리워한다. – pablomarti

답변

4

threadProcess의 작업이 너무 짧아서 두 번째 스레드가 초기화되기 전에 첫 번째 스레드가 완료 될 수 있다는 것을 제외하면 아무것도 없습니다.

루프에 지연을 넣으면 스레드가 동시에 작동하는 것을 볼 수 있습니다.

while($counter < 10){ 
    print "Thread #" . $number . ": " . $counter . "\n"; 
    sleep 1;  # or Time::HiRes::sleep 0.25, etc. 
    $counter++; 
} 
+0

감사합니다 !!! 죄송합니다 ... 잊어 버렸습니다 ... 감사합니다 !! – pablomarti

관련 문제