 2008/05/16
|
Last update 1999/02/20
TPJ: Issue_10_Threads
- primes
- primes~
- More Samples on Threads
| Issue_10_Threads1. primes
|
Download primes
|
#!/usr/bin/perl -w
|
|
# prime-pthread, courtesy of Tom Christiansen
|
|
|
|
use strict;
|
|
use Thread;
|
|
use Thread::Queue;
|
|
|
|
my $stream = new Thread::Queue;
|
|
my $kid = new Thread(\&check_num, $stream, 2);
|
|
for my $i ( 3 .. 1000 ) {
|
|
$stream->enqueue($i);
|
|
}
|
|
$stream->enqueue(undef);
|
|
$kid->join();
|
|
|
|
sub check_num {
|
|
my ($upstream, $cur_prime) = @_;
|
|
my $kid;
|
|
my $downstream = new Thread::Queue;
|
|
while (my $num = $upstream->dequeue) {
|
|
next unless $num % $cur_prime;
|
|
if ($kid) {
|
|
$downstream->enqueue($num);
|
|
} else {
|
|
print "Found prime $num\n";
|
|
$kid = new Thread(\&check_num, $downstream, $num);
|
|
}
|
|
}
|
|
$downstream->enqueue(undef) if $kid;
|
|
$kid->join() if $kid;
|
|
}
|
| Issue_10_Threads2. primes~
|
Download primes~
|
#!/usr/bin/perl -w
|
|
# prime-pthread, courtesy of Tom Christiansen
|
|
use strict;
|
|
use Thread;
|
|
use Thread::Queue;
|
|
my $stream = new Thread::Queue;
|
|
my $kid = new Thread(\&check_num, $stream, 2);
|
|
for my $i ( 3 .. 1000 ) {
|
|
$stream->enqueue($i);
|
|
}
|
|
$stream->enqueue(undef);
|
|
$kid->join();
|
|
sub check_num {
|
|
my ($upstream, $cur_prime) = @_;
|
|
my $kid;
|
|
my $downstream = new Thread::Queue;
|
|
while (my $num = $upstream->dequeue) {
|
|
next unless $num % $cur_prime;
|
|
if ($kid) {
|
|
$downstream->enqueue($num);
|
|
} else {
|
|
print "Found prime $num\n";
|
|
$kid = new Thread(\&check_num, $downstream, $num);
|
|
}
|
|
}
|
|
$downstream->enqueue(undef) if $kid;
|
|
$kid->join() if $kid;
|
|
}
|
| Issue_10_Threads3. More Samples on Threads
|

Last update 1999/02/20 
All Rights Reserved - (C) 1997 - 2008 by The Labs.Com |