1BEGIN { 2 eval { require Config; import Config }; 3 if ($@) { 4 print "1..0 # Skip: no Config\n"; 5 exit(0); 6 } 7} 8 9use Thread; 10 11$level = 0; 12 13sub worker 14{ 15 my $num = shift; 16 my $i; 17 print "thread $num starting\n"; 18 for ($i = 1; $i <= 20; $i++) { 19 print "thread $num iteration $i\n"; 20 select(undef, undef, undef, rand(10)/100); 21 { 22 lock($lock); 23 warn "thread $num saw non-zero level = $level\n" if $level; 24 $level++; 25 print "thread $num has lock\n"; 26 select(undef, undef, undef, rand(10)/100); 27 $level--; 28 } 29 print "thread $num released lock\n"; 30 } 31} 32 33for ($t = 1; $t <= 5; $t++) { 34 new Thread \&worker, $t; 35} 36