5 unshift @INC, '../lib';
6 require Config; import Config;
7 if (! $Config{'use5005threads'}) {
8 print "1..0 # Skip: not use5005threads\n";
12 # XXX known trouble with global destruction
13 $ENV{PERL_DESTRUCT_LEVEL} = 0 unless $ENV{PERL_DESTRUCT_LEVEL} > 3;
26 # create a thread passing args and immedaietly wait for it.
27 my $t = new Thread \&content,("ok 2\n","ok 3\n", 1..1000);
30 # check that lock works ...
32 $t = new Thread sub { lock $foo; print "ok 5\n" };
44 $ret = Thread->new(\&dorecurse, @_);
49 $t = new Thread \&dorecurse, map { "ok $_\n" } 6..10;
52 # test that sleep lets other thread run
53 $t = new Thread \&dorecurse,"ok 11\n";
58 sub islocked : locked {
64 $ret = Thread->new(\&islocked, shift);
69 $t = Thread->new(\&islocked, "ok 13\n", "ok 14\n");
74 sub new { bless [], shift }
75 sub monster : locked : method {
79 sub gollum { &monster }
81 Loch::Ness->monster(15);
82 Loch::Ness->new->monster(16);
83 Loch::Ness->gollum(17);
84 Loch::Ness->new->gollum(18);
86 my $short = "This is a long string that goes on and on.";
87 my $shorte = " a long string that goes on and on.";
88 my $long = "This is short.";
89 my $longe = " short.";
90 my $thr1 = new Thread \&threaded, $short, $shorte, "19";
91 my $thr2 = new Thread \&threaded, $long, $longe, "20";
94 my ($string, $string_end, $testno) = @_;
96 # Do the match, saving the output in appropriate variables
97 $string =~ /(.*)(is)(.*)/;
98 # Yield control, allowing the other thread to fill in the match variables
100 # Examine the match variable contents; on broken perls this fails
101 if ($3 eq $string_end) {
102 print "ok $testno\n";
108 # This is a KNOWN FAILURE, and one of the reasons why threading
109 # is still an experimental feature. It is here to stop people
110 # from deploying threads in production. ;-)
113 print "not ok $testno # other thread filled in match variables\n";