⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 thr5005.t

📁 UNIX下perl实现代码
💻 T
字号:
#!./perlBEGIN {    chdir 't' if -d 't';    @INC = '../lib';    require Config; import Config;    if (! $Config{'use5005threads'}) {	print "1..0 # Skip: not use5005threads\n";	exit 0;    }    # XXX known trouble with global destruction    $ENV{PERL_DESTRUCT_LEVEL} = 0 unless $ENV{PERL_DESTRUCT_LEVEL} > 3;}$| = 1;print "1..22\n";use Thread 'yield';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 : 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;{    package Loch::Ness;    sub new { bless [], shift }    sub monster : locked : method {	my($s, $m) = @_;	print "ok $m\n";    }    sub gollum { &monster }}Loch::Ness->monster(15);Loch::Ness->new->monster(16);Loch::Ness->gollum(17);Loch::Ness->new->gollum(18);my $short = "This is a long string that goes on and on.";my $shorte = " a long string that goes on and on.";my $long  = "This is short.";my $longe  = " short.";my $thr1 = new Thread \&threaded, $short, $shorte, "19";my $thr2 = new Thread \&threaded, $long, $longe, "20";my $thr3 = new Thread \&testsprintf, "21";sub testsprintf {  my $testno = shift;  # this may coredump if thread vars are not properly initialised  my $same = sprintf "%.0f", $testno;  if ($testno eq $same) {    print "ok $testno\n";  } else {    print "not ok $testno\t# '$testno' ne '$same'\n";  }}sub threaded {  my ($string, $string_end, $testno) = @_;  # Do the match, saving the output in appropriate variables  $string =~ /(.*)(is)(.*)/;  # Yield control, allowing the other thread to fill in the match variables  yield();  # Examine the match variable contents; on broken perls this fails  if ($3 eq $string_end) {    print "ok $testno\n";  }  else {    warn <<EOT;## This is a KNOWN FAILURE, and one of the reasons why threading# is still an experimental feature.  It is here to stop people# from deploying threads in production. ;-)#EOT    print "not ok $testno # other thread filled in match variables\n";  }}$thr1->join;$thr2->join;$thr3->join;print "ok 22\n";

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -