freebsd-dev/contrib/perl5/t/lib/thread.t

74 lines
1.1 KiB
Perl
Executable File

#!./perl
BEGIN {
chdir 't' if -d 't';
@INC = '../lib';
require Config; import Config;
if (! $Config{'usethreads'}) {
print "1..0\n";
exit 0;
}
# XXX known trouble with global destruction
$ENV{PERL_DESTRUCT_LEVEL} = 0 unless $ENV{PERL_DESTRUCT_LEVEL} > 3;
}
$| = 1;
print "1..14\n";
use Thread;
print "ok 1\n";
sub content
{
print shift;
return shift;
}
# create a thread passing args and immedaietly wait for it.
my $t = new Thread \&content,("ok 2\n","ok 3\n", 1..1000);
print $t->join;
# check that lock works ...
{lock $foo;
$t = new Thread sub { lock $foo; print "ok 5\n" };
print "ok 4\n";
}
$t->join;
sub dorecurse
{
my $val = shift;
my $ret;
print $val;
if (@_)
{
$ret = Thread->new(\&dorecurse, @_);
$ret->join;
}
}
$t = new Thread \&dorecurse, map { "ok $_\n" } 6..10;
$t->join;
# test that sleep lets other thread run
$t = new Thread \&dorecurse,"ok 11\n";
sleep 6;
print "ok 12\n";
$t->join;
sub islocked
{
use attrs 'locked';
my $val = shift;
my $ret;
print $val;
if (@_)
{
$ret = Thread->new(\&islocked, shift);
}
$ret;
}
$t = Thread->new(\&islocked, "ok 13\n", "ok 14\n");
$t->join->join;